From d6def3af152ed52edc5d7c7596806f546a33ed16 Mon Sep 17 00:00:00 2001 From: leefer Date: Mon, 3 Aug 2026 21:42:25 +0800 Subject: [PATCH] refactor: establish standalone application boundary --- .dockerignore | 1 + .gitignore | 9 +- AGENTS.md | 37 + ARCHITECTURE.md | 163 +- DOCKER_DEPLOY.md | 18 +- README.md | 16 +- advanced_strategies.py | 7 - alert_service.py | 3 - app_config.py | 3 - assistant_agent.py | 7 - backend/application.py | 1024 +- backend/data/providers/tushare_client.py | 2189 +-- backend/data/providers/tushare_daily.py | 160 + backend/data/providers/tushare_dashboard.py | 644 + .../data/providers/tushare_dragon_tiger.py | 214 + backend/data/providers/tushare_helpers.py | 64 + backend/data/providers/tushare_indices.py | 118 + backend/data/providers/tushare_industries.py | 616 + backend/data/providers/tushare_sectors.py | 224 + backend/data/providers/tushare_stocks.py | 137 + backend/data/providers/tushare_transport.py | 48 + backend/features/accounts/application.py | 63 + backend/features/accounts/routes.py | 22 + backend/features/alerts/routes.py | 47 + backend/features/auction/routes.py | 23 + backend/features/dragon_tiger/routes.py | 45 + backend/features/heaven/manual.py | 412 + backend/features/heaven/market_context.py | 338 + backend/features/heaven/readings.py | 220 + backend/features/heaven/routes.py | 79 + backend/features/heaven/service.py | 1311 +- backend/features/heaven/trend.py | 358 + backend/features/market/insights.py | 1322 +- backend/features/market/insights_auction.py | 221 + .../features/market/insights_auction_data.py | 318 + .../market/insights_auction_scoring.py | 355 + backend/features/market/insights_context.py | 84 + .../features/market/insights_popularity.py | 156 + backend/features/market/insights_themes.py | 222 + backend/features/market/routes.py | 91 + backend/features/mentor/routes.py | 57 + backend/features/pools/routes.py | 18 + backend/features/popularity/routes.py | 23 + backend/features/review/routes.py | 81 + backend/features/rotation/routes.py | 30 + backend/features/screener/backtest.py | 141 + backend/features/screener/catalog.py | 707 + backend/features/screener/compiler.py | 2 +- backend/features/screener/data_sync.py | 342 + backend/features/screener/engine.py | 2220 +-- backend/features/screener/factors.py | 562 + backend/features/screener/formula.py | 146 + backend/features/screener/indicators.py | 238 + backend/features/screener/regime.py | 53 + backend/features/screener/repository.py | 5 - backend/features/screener/routes.py | 106 + backend/features/screener/selection.py | 138 + backend/features/screener/service.py | 10 +- backend/features/sentiment/routes.py | 19 + backend/features/system/routes.py | 40 + backend/features/system/service.py | 254 + backend/features/themes/routes.py | 35 + backend/http/dispatch.py | 115 + backend/jobs/service.py | 49 + chart_data_provider.py | 7 - config/README.md | 4 +- config/architecture-inventory.json | 626 +- docs/README.md | 9 + docs/governance/adr/0001-modular-monolith.md | 75 + docs/governance/architecture-inventory.json | 317 + docs/governance/architecture-standard.md | 277 + docs/governance/code-reduction.md | 401 + docs/governance/stage-01-baseline.md | 60 + docs/governance/stage-02-inventory.md | 72 + docs/governance/stage-04-registries.md | 48 + docs/governance/stage-05-bootstrap.md | 24 + docs/governance/stage-06-data-gateway.md | 29 + docs/governance/stage-07-data-quality.md | 32 + .../stage-08-database-migrations.md | 28 + docs/governance/stage-09-repositories.md | 27 + docs/governance/stage-10-feature-services.md | 28 + docs/governance/stage-11-http-governance.md | 28 + docs/governance/stage-12-background-jobs.md | 30 + docs/governance/stage-13-llm-gateway.md | 32 + .../stage-14-frontend-boundaries.md | 38 + docs/governance/stage-15-frontend-shell.md | 42 + docs/governance/stage-16-css-tokens.md | 49 + docs/governance/stage-17-page-modules.md | 53 + docs/maintenance/人工维护指南.md | 76 + docs/migration/README.md | 13 + docs/migration/evidence/slice-00/README.md | 34 + .../slice-00/app-exact-dark-1920x1080.png | Bin 0 -> 119623 bytes .../slice-00/app-exact-dark-390x844.png | Bin 0 -> 35602 bytes .../slice-00/app-exact-light-1920x1080.png | Bin 0 -> 106354 bytes .../slice-00/app-exact-light-390x844.png | Bin 0 -> 34472 bytes docs/migration/evidence/slice-01/README.md | 57 + .../evidence/slice-01/app-light-1920x1080.png | Bin 0 -> 78754 bytes docs/migration/evidence/slice-02/README.md | 61 + .../evidence/slice-02/app-light-1280x720.png | Bin 0 -> 94270 bytes docs/migration/evidence/slice-03/README.md | 66 + .../evidence/slice-03/app-light-1920x1080.png | Bin 0 -> 154636 bytes docs/migration/evidence/slice-04/README.md | 58 + .../slice-04/app-light-ladder-1920x1080.png | Bin 0 -> 142220 bytes .../slice-04/app-light-rotation-1920x1080.png | Bin 0 -> 202888 bytes docs/migration/evidence/slice-05/README.md | 69 + .../migration/evidence/slice-05/api-diff.json | 61 + .../slice-05/app-light-auction-1920x1080.png | Bin 0 -> 165864 bytes .../app-light-dragon-tiger-1920x1080.png | Bin 0 -> 67791 bytes .../app-light-popularity-1920x1080.png | Bin 0 -> 139569 bytes .../slice-05/app-light-themes-1920x1080.png | Bin 0 -> 139155 bytes .../evidence/slice-05/database-diff.json | 51 + docs/migration/evidence/slice-06/README.md | 69 + .../migration/evidence/slice-06/api-diff.json | 38 + .../evidence/slice-06/api-requests.json | 59 + .../evidence/slice-06/curated-screener.jpg | Bin 0 -> 88654 bytes .../evidence/slice-06/custom-screener.jpg | Bin 0 -> 90695 bytes .../evidence/slice-06/database-diff.json | 115 + docs/migration/evidence/slice-06/tracking.jpg | Bin 0 -> 69628 bytes docs/migration/evidence/slice-07/README.md | 71 + .../migration/evidence/slice-07/api-diff.json | 27 + .../evidence/slice-07/api-requests.json | 14 + .../evidence/slice-07/database-diff.json | 51 + .../evidence/slice-07/mentor-a-filter.jpg | Bin 0 -> 84774 bytes .../evidence/slice-07/mentor-all.jpg | Bin 0 -> 84617 bytes docs/migration/evidence/slice-08/README.md | 69 + .../migration/evidence/slice-08/api-diff.json | 71 + .../evidence/slice-08/api-requests.json | 42 + .../evidence/slice-08/database-diff.json | 59 + .../evidence/slice-08/heaven-fortune-1080.png | Bin 0 -> 107431 bytes .../slice-08/heaven-heart-breathing-1080.png | Bin 0 -> 73841 bytes .../slice-08/heaven-heart-dark-1080.png | Bin 0 -> 73004 bytes .../evidence/slice-08/heaven-trend-1080.png | Bin 0 -> 77780 bytes docs/migration/evidence/slice-09/README.md | 60 + .../migration/evidence/slice-09/api-diff.json | 60 + .../evidence/slice-09/api-requests.json | 32 + .../evidence/slice-09/database-diff.json | 75 + .../review-workspace-night-1920x1080.png | Bin 0 -> 100490 bytes docs/migration/evidence/slice-10/README.md | 70 + .../migration/evidence/slice-10/api-diff.json | 236 + .../evidence/slice-10/api-requests.json | 29 + .../evidence/slice-10/browser-acceptance.json | 101 + .../evidence/slice-10/database-diff.json | 202 + ...-light-1920x1080.INVALID-login-session.png | Bin 0 -> 24303 bytes ...tend-migrated-dark-sentiment-1920x1080.png | Bin 0 -> 136137 bytes ...ontend-migrated-dark-sentiment-390x844.png | Bin 0 -> 35544 bytes ...igrated-heaven-fortune-light-1920x1080.png | Bin 0 -> 99086 bytes ...ed-heaven-heart-breath-light-1920x1080.png | Bin 0 -> 71914 bytes ...ted-heaven-heart-intro-light-1920x1080.png | Bin 0 -> 78900 bytes ...frontend-migrated-heaven-trend-390x844.png | Bin 0 -> 31554 bytes ...-migrated-heaven-trend-light-1920x1080.png | Bin 0 -> 72587 bytes .../frontend-migrated-light-1920x1080.png | Bin 0 -> 129058 bytes ...tend-migrated-screener-light-1920x1080.png | Bin 0 -> 92115 bytes ...ntend-original-auction-light-1920x1080.png | Bin 0 -> 142536 bytes ...tend-original-dark-sentiment-1920x1080.png | Bin 0 -> 136270 bytes ...ontend-original-dark-sentiment-390x844.png | Bin 0 -> 35554 bytes ...riginal-heaven-fortune-light-1920x1080.png | Bin 0 -> 99067 bytes ...al-heaven-heart-breath-light-1920x1080.png | Bin 0 -> 69016 bytes ...nal-heaven-heart-intro-light-1920x1080.png | Bin 0 -> 79183 bytes ...frontend-original-heaven-trend-390x844.png | Bin 0 -> 31351 bytes ...-original-heaven-trend-light-1920x1080.png | Bin 0 -> 72460 bytes .../frontend-original-light-1920x1080.png | Bin 0 -> 129054 bytes ...tend-original-screener-light-1920x1080.png | Bin 0 -> 92826 bytes .../slice-10/frontend-source-map.json | 190 + docs/migration/evidence/slice-11/README.md | 108 + .../migration/evidence/slice-11/api-diff.json | 236 + .../evidence/slice-11/browser-acceptance.json | 101 + .../evidence/slice-11/completion-audit.md | 83 + .../evidence/slice-11/database-diff.json | 202 + .../evidence/slice-11/manual-acceptance.md | 33 + .../slice-11/screenshot-pixel-audit.json | 27 + .../evidence/slice-11/uncertain-code-audit.md | 91 + docs/migration/next失败冻结记录.md | 29 + docs/migration/人工维护与本地切换指南.md | 159 + docs/migration/保真迁移状态.json | 76 + docs/migration/保真迁移账本.md | 466 + docs/migration/原版保真迁移总纲.md | 128 + docs/migration/原版资产清单.json | 3124 ++++ docs/migration/目标目录与切片顺序.md | 71 + docs/migration/重建迁移章程.md | 271 + docs/product/小白复盘-完整产品规格说明书.md | 2000 ++ frontend/app.js | 1872 +- frontend/bootstrap.js | 39 + frontend/index.html | 1322 +- frontend/pages.config.js | 61 + frontend/pages/auction/foundation.css | 2305 +++ frontend/pages/auction/page.html | 74 + frontend/pages/auction/page.js | 45 +- frontend/pages/dragon-tiger/foundation.css | 2475 +++ frontend/pages/dragon-tiger/page.html | 85 + frontend/pages/dragon-tiger/page.js | 45 +- frontend/pages/heaven/foundation.css | 11655 ++++++++++++ frontend/pages/heaven/page.css | 1084 -- frontend/pages/heaven/page.html | 255 + frontend/pages/heaven/page.js | 139 +- frontend/pages/ladder/foundation.css | 1172 ++ frontend/pages/ladder/page.html | 19 + frontend/pages/ladder/page.js | 19 +- frontend/pages/market/bindings.js | 40 + frontend/pages/market/breadth.js | 41 + frontend/pages/market/charts.js | 387 + frontend/pages/market/entity-detail.js | 199 + frontend/pages/market/foundation.css | 1325 ++ frontend/pages/market/preview.js | 446 + frontend/pages/market/runtime.js | 1333 -- frontend/pages/market/search.js | 131 + frontend/pages/market/stock-detail.js | 124 + frontend/pages/mentor/foundation.css | 2777 +++ frontend/pages/mentor/page.html | 72 + frontend/pages/mentor/page.js | 36 +- frontend/pages/pools/foundation.css | 2491 +++ frontend/pages/pools/page.html | 235 + frontend/pages/pools/page.js | 94 +- frontend/pages/popularity/foundation.css | 921 + frontend/pages/popularity/page.html | 35 + frontend/pages/popularity/page.js | 22 +- frontend/pages/review/foundation.css | 2169 +++ frontend/pages/review/page.html | 57 + frontend/pages/review/page.js | 55 +- frontend/pages/rotation/foundation.css | 1247 ++ frontend/pages/rotation/page.html | 54 + frontend/pages/rotation/page.js | 14 +- frontend/pages/runtime.js | 16 + frontend/pages/screener/foundation.css | 6433 +++++++ frontend/pages/screener/page.html | 219 + frontend/pages/screener/page.js | 76 +- frontend/pages/sentiment/foundation.css | 1676 ++ frontend/pages/sentiment/page.html | 81 + frontend/pages/sentiment/page.js | 22 +- frontend/pages/themes/foundation.css | 1536 ++ frontend/pages/themes/page.html | 55 + frontend/pages/themes/page.js | 15 +- frontend/shared/admin.js | 256 + frontend/shared/application.js | 53 + frontend/shared/auth.css | 1655 ++ frontend/shared/base.css | 187 + frontend/shared/components/cards.css | 1069 ++ frontend/shared/components/controls.css | 1041 ++ frontend/shared/components/dialogs.css | 1255 ++ frontend/shared/components/feedback.css | 380 + frontend/shared/components/navigation.css | 226 + frontend/shared/components/tables.css | 426 + frontend/shared/context.js | 216 + frontend/shared/dashboard.js | 194 + frontend/shared/export.js | 3 - frontend/shared/feedback.js | 153 + frontend/shared/session.js | 285 + frontend/shared/shell.css | 2800 +++ frontend/shared/table.js | 81 + frontend/shared/theme.js | 115 + frontend/styles/design-system.css | 1001 - frontend/styles/redesign-v2.css | 8531 --------- frontend/styles/renovation.css | 1480 -- frontend/styles/styles.css | 15360 ---------------- frontend/styles/theme.css | 1253 -- heaven_agent.py | 7 - heaven_engine.py | 7 - ifind_client.py | 7 - llm_strategy.py | 7 - llm_stream.py | 7 - market_insights.py | 1 - mentor_agent.py | 7 - playwright.config.js | 1 + realtime_aggregator.py | 7 - runtime/.gitignore | 2 + screener.py | 7 - security.py | 3 - sentiment_engine.py | 7 - strategy_tracking.py | 3 - tests/e2e/app-shell.spec.js | 38 +- tests/frontend_test_helpers.py | 47 + tests/preservation_helpers.py | 589 - tests/test_alerts.py | 2 +- tests/test_chart_data_provider.py | 2 +- tests/test_cleanup_contract.py | 7 +- tests/test_css_governance.py | 573 +- tests/test_curated_screener.py | 2 +- tests/test_feature_boundaries.py | 68 +- tests/test_five_phase_weights.py | 2 +- tests/test_frontend_boundaries.py | 263 +- tests/test_frontend_contract.py | 104 +- tests/test_global_search.py | 9 +- tests/test_heaven_realtime.py | 10 +- tests/test_hot_money_profiles.py | 2 +- tests/test_http_dispatch.py | 62 + tests/test_ifind_client.py | 2 +- tests/test_ifind_features.py | 6 +- tests/test_llm_stream.py | 2 +- tests/test_llm_transport.py | 24 +- tests/test_maintenance_tools.py | 42 +- tests/test_market_insights.py | 6 +- tests/test_market_mode.py | 6 +- tests/test_mentor_registry.py | 2 +- tests/test_mentor_stream.py | 2 +- tests/test_preservation_slice_accounts.py | 118 - tests/test_preservation_slice_frontend.py | 96 - tests/test_preservation_slice_heaven.py | 167 - ...test_preservation_slice_ladder_rotation.py | 93 - tests/test_preservation_slice_market.py | 195 - ...test_preservation_slice_market_insights.py | 205 - tests/test_preservation_slice_mentor_llm.py | 205 - .../test_preservation_slice_review_alerts.py | 212 - tests/test_preservation_slice_screener.py | 214 - ...test_preservation_slice_sentiment_pools.py | 131 - tests/test_realtime_dashboard.py | 2 +- tests/test_repository_boundaries.py | 2 +- tests/test_review_assistant.py | 2 +- tests/test_sentiment_engine.py | 2 +- tests/test_strategy_tracking.py | 2 +- tests/test_trade_journal.py | 2 +- tools/README.md | 47 +- tools/build_api_registry.py | 69 +- tools/build_architecture_inventory.py | 146 +- tools/build_preservation_manifest.py | 182 - tools/compare_preservation_apis.py | 200 - tools/compare_preservation_databases.py | 120 - tools/move_class_methods.py | 76 - tools/run_preservation_runtime.py | 55 - tools/split_frontend_runtime.py | 199 - tools/start_local.ps1 | 77 + tools/verify_baseline.py | 27 +- trade_journal.py | 3 - tushare_client.py | 7 - 322 files changed, 73872 insertions(+), 44656 deletions(-) create mode 100644 AGENTS.md delete mode 100644 advanced_strategies.py delete mode 100644 alert_service.py delete mode 100644 app_config.py delete mode 100644 assistant_agent.py create mode 100644 backend/data/providers/tushare_daily.py create mode 100644 backend/data/providers/tushare_dashboard.py create mode 100644 backend/data/providers/tushare_dragon_tiger.py create mode 100644 backend/data/providers/tushare_helpers.py create mode 100644 backend/data/providers/tushare_indices.py create mode 100644 backend/data/providers/tushare_industries.py create mode 100644 backend/data/providers/tushare_sectors.py create mode 100644 backend/data/providers/tushare_stocks.py create mode 100644 backend/data/providers/tushare_transport.py create mode 100644 backend/features/accounts/application.py create mode 100644 backend/features/accounts/routes.py create mode 100644 backend/features/alerts/routes.py create mode 100644 backend/features/auction/routes.py create mode 100644 backend/features/dragon_tiger/routes.py create mode 100644 backend/features/heaven/manual.py create mode 100644 backend/features/heaven/market_context.py create mode 100644 backend/features/heaven/readings.py create mode 100644 backend/features/heaven/routes.py create mode 100644 backend/features/heaven/trend.py create mode 100644 backend/features/market/insights_auction.py create mode 100644 backend/features/market/insights_auction_data.py create mode 100644 backend/features/market/insights_auction_scoring.py create mode 100644 backend/features/market/insights_context.py create mode 100644 backend/features/market/insights_popularity.py create mode 100644 backend/features/market/insights_themes.py create mode 100644 backend/features/market/routes.py create mode 100644 backend/features/mentor/routes.py create mode 100644 backend/features/pools/routes.py create mode 100644 backend/features/popularity/routes.py create mode 100644 backend/features/review/routes.py create mode 100644 backend/features/rotation/routes.py create mode 100644 backend/features/screener/backtest.py create mode 100644 backend/features/screener/catalog.py create mode 100644 backend/features/screener/data_sync.py create mode 100644 backend/features/screener/factors.py create mode 100644 backend/features/screener/formula.py create mode 100644 backend/features/screener/indicators.py create mode 100644 backend/features/screener/regime.py create mode 100644 backend/features/screener/routes.py create mode 100644 backend/features/screener/selection.py create mode 100644 backend/features/sentiment/routes.py create mode 100644 backend/features/system/routes.py create mode 100644 backend/features/system/service.py create mode 100644 backend/features/themes/routes.py create mode 100644 backend/http/dispatch.py create mode 100644 backend/jobs/service.py delete mode 100644 chart_data_provider.py create mode 100644 docs/README.md create mode 100644 docs/governance/adr/0001-modular-monolith.md create mode 100644 docs/governance/architecture-inventory.json create mode 100644 docs/governance/architecture-standard.md create mode 100644 docs/governance/code-reduction.md create mode 100644 docs/governance/stage-01-baseline.md create mode 100644 docs/governance/stage-02-inventory.md create mode 100644 docs/governance/stage-04-registries.md create mode 100644 docs/governance/stage-05-bootstrap.md create mode 100644 docs/governance/stage-06-data-gateway.md create mode 100644 docs/governance/stage-07-data-quality.md create mode 100644 docs/governance/stage-08-database-migrations.md create mode 100644 docs/governance/stage-09-repositories.md create mode 100644 docs/governance/stage-10-feature-services.md create mode 100644 docs/governance/stage-11-http-governance.md create mode 100644 docs/governance/stage-12-background-jobs.md create mode 100644 docs/governance/stage-13-llm-gateway.md create mode 100644 docs/governance/stage-14-frontend-boundaries.md create mode 100644 docs/governance/stage-15-frontend-shell.md create mode 100644 docs/governance/stage-16-css-tokens.md create mode 100644 docs/governance/stage-17-page-modules.md create mode 100644 docs/maintenance/人工维护指南.md create mode 100644 docs/migration/README.md create mode 100644 docs/migration/evidence/slice-00/README.md create mode 100644 docs/migration/evidence/slice-00/app-exact-dark-1920x1080.png create mode 100644 docs/migration/evidence/slice-00/app-exact-dark-390x844.png create mode 100644 docs/migration/evidence/slice-00/app-exact-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-00/app-exact-light-390x844.png create mode 100644 docs/migration/evidence/slice-01/README.md create mode 100644 docs/migration/evidence/slice-01/app-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-02/README.md create mode 100644 docs/migration/evidence/slice-02/app-light-1280x720.png create mode 100644 docs/migration/evidence/slice-03/README.md create mode 100644 docs/migration/evidence/slice-03/app-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-04/README.md create mode 100644 docs/migration/evidence/slice-04/app-light-ladder-1920x1080.png create mode 100644 docs/migration/evidence/slice-04/app-light-rotation-1920x1080.png create mode 100644 docs/migration/evidence/slice-05/README.md create mode 100644 docs/migration/evidence/slice-05/api-diff.json create mode 100644 docs/migration/evidence/slice-05/app-light-auction-1920x1080.png create mode 100644 docs/migration/evidence/slice-05/app-light-dragon-tiger-1920x1080.png create mode 100644 docs/migration/evidence/slice-05/app-light-popularity-1920x1080.png create mode 100644 docs/migration/evidence/slice-05/app-light-themes-1920x1080.png create mode 100644 docs/migration/evidence/slice-05/database-diff.json create mode 100644 docs/migration/evidence/slice-06/README.md create mode 100644 docs/migration/evidence/slice-06/api-diff.json create mode 100644 docs/migration/evidence/slice-06/api-requests.json create mode 100644 docs/migration/evidence/slice-06/curated-screener.jpg create mode 100644 docs/migration/evidence/slice-06/custom-screener.jpg create mode 100644 docs/migration/evidence/slice-06/database-diff.json create mode 100644 docs/migration/evidence/slice-06/tracking.jpg create mode 100644 docs/migration/evidence/slice-07/README.md create mode 100644 docs/migration/evidence/slice-07/api-diff.json create mode 100644 docs/migration/evidence/slice-07/api-requests.json create mode 100644 docs/migration/evidence/slice-07/database-diff.json create mode 100644 docs/migration/evidence/slice-07/mentor-a-filter.jpg create mode 100644 docs/migration/evidence/slice-07/mentor-all.jpg create mode 100644 docs/migration/evidence/slice-08/README.md create mode 100644 docs/migration/evidence/slice-08/api-diff.json create mode 100644 docs/migration/evidence/slice-08/api-requests.json create mode 100644 docs/migration/evidence/slice-08/database-diff.json create mode 100644 docs/migration/evidence/slice-08/heaven-fortune-1080.png create mode 100644 docs/migration/evidence/slice-08/heaven-heart-breathing-1080.png create mode 100644 docs/migration/evidence/slice-08/heaven-heart-dark-1080.png create mode 100644 docs/migration/evidence/slice-08/heaven-trend-1080.png create mode 100644 docs/migration/evidence/slice-09/README.md create mode 100644 docs/migration/evidence/slice-09/api-diff.json create mode 100644 docs/migration/evidence/slice-09/api-requests.json create mode 100644 docs/migration/evidence/slice-09/database-diff.json create mode 100644 docs/migration/evidence/slice-09/review-workspace-night-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/README.md create mode 100644 docs/migration/evidence/slice-10/api-diff.json create mode 100644 docs/migration/evidence/slice-10/api-requests.json create mode 100644 docs/migration/evidence/slice-10/browser-acceptance.json create mode 100644 docs/migration/evidence/slice-10/database-diff.json create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-auction-light-1920x1080.INVALID-login-session.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-dark-sentiment-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-dark-sentiment-390x844.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-heaven-fortune-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-heaven-heart-breath-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-heaven-heart-intro-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-heaven-trend-390x844.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-heaven-trend-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-migrated-screener-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-auction-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-dark-sentiment-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-dark-sentiment-390x844.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-heaven-fortune-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-heaven-heart-breath-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-heaven-heart-intro-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-heaven-trend-390x844.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-heaven-trend-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-original-screener-light-1920x1080.png create mode 100644 docs/migration/evidence/slice-10/frontend-source-map.json create mode 100644 docs/migration/evidence/slice-11/README.md create mode 100644 docs/migration/evidence/slice-11/api-diff.json create mode 100644 docs/migration/evidence/slice-11/browser-acceptance.json create mode 100644 docs/migration/evidence/slice-11/completion-audit.md create mode 100644 docs/migration/evidence/slice-11/database-diff.json create mode 100644 docs/migration/evidence/slice-11/manual-acceptance.md create mode 100644 docs/migration/evidence/slice-11/screenshot-pixel-audit.json create mode 100644 docs/migration/evidence/slice-11/uncertain-code-audit.md create mode 100644 docs/migration/next失败冻结记录.md create mode 100644 docs/migration/人工维护与本地切换指南.md create mode 100644 docs/migration/保真迁移状态.json create mode 100644 docs/migration/保真迁移账本.md create mode 100644 docs/migration/原版保真迁移总纲.md create mode 100644 docs/migration/原版资产清单.json create mode 100644 docs/migration/目标目录与切片顺序.md create mode 100644 docs/migration/重建迁移章程.md create mode 100644 docs/product/小白复盘-完整产品规格说明书.md create mode 100644 frontend/bootstrap.js create mode 100644 frontend/pages/auction/foundation.css create mode 100644 frontend/pages/auction/page.html create mode 100644 frontend/pages/dragon-tiger/foundation.css create mode 100644 frontend/pages/dragon-tiger/page.html create mode 100644 frontend/pages/heaven/foundation.css delete mode 100644 frontend/pages/heaven/page.css create mode 100644 frontend/pages/heaven/page.html create mode 100644 frontend/pages/ladder/foundation.css create mode 100644 frontend/pages/ladder/page.html create mode 100644 frontend/pages/market/bindings.js create mode 100644 frontend/pages/market/breadth.js create mode 100644 frontend/pages/market/charts.js create mode 100644 frontend/pages/market/entity-detail.js create mode 100644 frontend/pages/market/foundation.css create mode 100644 frontend/pages/market/preview.js delete mode 100644 frontend/pages/market/runtime.js create mode 100644 frontend/pages/market/search.js create mode 100644 frontend/pages/market/stock-detail.js create mode 100644 frontend/pages/mentor/foundation.css create mode 100644 frontend/pages/mentor/page.html create mode 100644 frontend/pages/pools/foundation.css create mode 100644 frontend/pages/pools/page.html create mode 100644 frontend/pages/popularity/foundation.css create mode 100644 frontend/pages/popularity/page.html create mode 100644 frontend/pages/review/foundation.css create mode 100644 frontend/pages/review/page.html create mode 100644 frontend/pages/rotation/foundation.css create mode 100644 frontend/pages/rotation/page.html create mode 100644 frontend/pages/screener/foundation.css create mode 100644 frontend/pages/screener/page.html create mode 100644 frontend/pages/sentiment/foundation.css create mode 100644 frontend/pages/sentiment/page.html create mode 100644 frontend/pages/themes/foundation.css create mode 100644 frontend/pages/themes/page.html create mode 100644 frontend/shared/admin.js create mode 100644 frontend/shared/application.js create mode 100644 frontend/shared/auth.css create mode 100644 frontend/shared/base.css create mode 100644 frontend/shared/components/cards.css create mode 100644 frontend/shared/components/controls.css create mode 100644 frontend/shared/components/dialogs.css create mode 100644 frontend/shared/components/feedback.css create mode 100644 frontend/shared/components/navigation.css create mode 100644 frontend/shared/components/tables.css create mode 100644 frontend/shared/context.js create mode 100644 frontend/shared/dashboard.js create mode 100644 frontend/shared/feedback.js create mode 100644 frontend/shared/session.js create mode 100644 frontend/shared/shell.css create mode 100644 frontend/shared/table.js create mode 100644 frontend/shared/theme.js delete mode 100644 frontend/styles/design-system.css delete mode 100644 frontend/styles/redesign-v2.css delete mode 100644 frontend/styles/renovation.css delete mode 100644 frontend/styles/styles.css delete mode 100644 frontend/styles/theme.css delete mode 100644 heaven_agent.py delete mode 100644 heaven_engine.py delete mode 100644 ifind_client.py delete mode 100644 llm_strategy.py delete mode 100644 llm_stream.py delete mode 100644 market_insights.py delete mode 100644 mentor_agent.py delete mode 100644 realtime_aggregator.py create mode 100644 runtime/.gitignore delete mode 100644 screener.py delete mode 100644 security.py delete mode 100644 sentiment_engine.py delete mode 100644 strategy_tracking.py create mode 100644 tests/frontend_test_helpers.py delete mode 100644 tests/preservation_helpers.py delete mode 100644 tests/test_preservation_slice_accounts.py delete mode 100644 tests/test_preservation_slice_frontend.py delete mode 100644 tests/test_preservation_slice_heaven.py delete mode 100644 tests/test_preservation_slice_ladder_rotation.py delete mode 100644 tests/test_preservation_slice_market.py delete mode 100644 tests/test_preservation_slice_market_insights.py delete mode 100644 tests/test_preservation_slice_mentor_llm.py delete mode 100644 tests/test_preservation_slice_review_alerts.py delete mode 100644 tests/test_preservation_slice_screener.py delete mode 100644 tests/test_preservation_slice_sentiment_pools.py delete mode 100644 tools/build_preservation_manifest.py delete mode 100644 tools/compare_preservation_apis.py delete mode 100644 tools/compare_preservation_databases.py delete mode 100644 tools/move_class_methods.py delete mode 100644 tools/run_preservation_runtime.py delete mode 100644 tools/split_frontend_runtime.py create mode 100644 tools/start_local.ps1 delete mode 100644 trade_journal.py delete mode 100644 tushare_client.py diff --git a/.dockerignore b/.dockerignore index 82eb2ca..58d5f1d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,6 +7,7 @@ __pycache__/ *.py[cod] *.log +runtime/ data/cache/ data/private-mentor-skills/ data/*.db diff --git a/.gitignore b/.gitignore index 9226beb..b62287d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,11 +15,6 @@ data/*.backup .coverage htmlcov/ .pytest_cache/ -test-results/ -playwright-report/ +runtime/* +!runtime/.gitignore node_modules/ -next/.venv/ -next/data/ -next/frontend/dist/ -next/frontend/.vite/ -next/frontend/coverage/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..85a2b4d --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,37 @@ +# 小白复盘维护约束 + +本目录是小白复盘唯一正式源码。任何修改开始前必须读取: + +1. `ARCHITECTURE.md` +2. `docs/product/小白复盘-完整产品规格说明书.md` +3. 与任务有关的`config/*.json`、源码和测试 + +`docs/migration/`保存迁移事实与历史证据,不是第二套产品实现。发生冲突时,依次以用户当前明确 +决定、当前正式程序的真实行为、产品规格说明书为准。 + +## 产品边界 + +- 保持已经验收的功能、视觉、布局、动画、交互、响应式行为和日夜主题。 +- 保持API路径、字段、状态码、流式协议、数据库兼容和账户隔离。 +- 保持数据来源、日期、单位、复权、新鲜度、覆盖率和禁止静默降级规则。 +- LLM只通过`backend/llm/`调用;浏览器请求只通过`frontend/shared/api.js`发出。 +- 不得读取、导入或运行本目录父级的旧源码、静态资源、配置、测试或数据。 + +## 结构边界 + +- 保持模块化单体技术栈:一个Python进程、一个SQLite数据库、无构建前端。 +- 业务代码进入`backend/features//`,数据适配进入`backend/data/`,后台任务进入 + `backend/jobs/`,HTTP公共能力进入`backend/http/`。 +- 页面结构、行为和样式分别由`frontend/pages//`及`frontend/shared/`的唯一所有者维护。 +- 不建立根级兼容转发文件、第二套路由、第二套数据客户端或晚加载CSS补丁层。 +- 不确定代码默认保留;删除前必须有引用扫描、测试和真实浏览器证据。 + +## 最低验收 + +1. 运行相关领域测试。 +2. 运行`python tools/verify_baseline.py`。 +3. 涉及运行时或前端时运行`python tools/verify_baseline.py --e2e`。 +4. 检查`git diff --check`,并确认没有密钥、数据库和运行产物进入Git。 +5. 用户可观察行为发生变化时,必须说明并由用户验收。 + +数据和`.env`必须成对备份。`data/private-mentor-skills/`、`data/*.db`、`runtime/`及`.env`不得提交。 diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 542357d..438c4e9 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -1,9 +1,8 @@ -# Candidate architecture +# Application architecture -`app/` is the behavior-preserving modular source tree accepted by the user on 2026-08-01. -The original `webapp/` runtime remains the deployment rollback baseline until an explicitly -approved switch. `next/` is a rejected, frozen implementation and is not a source for this -directory. +`app/` is the standalone, behavior-preserving modular source tree accepted by the user on +2026-08-01. It is the only production source boundary and must not read or import a parent +checkout, a retired baseline, or a failed implementation. The application deliberately remains a modular monolith: one Python process, one SQLite WAL database, and a build-free HTML/CSS/JavaScript client. The migration changed source ownership @@ -26,57 +25,157 @@ background scheduler ## Source ownership -- `server.py` is the stable command/import facade. Runtime composition lives in - `backend/application.py` and `backend/bootstrap/`. +- `server.py` is the stable command/import facade. `backend/application.py` is the narrow + composition root for `DashboardService`, `RequestHandler`, and the process-wide service + instance; dependency construction remains in `backend/bootstrap/`. - `backend/bootstrap/` owns process configuration, dependency construction, startup, and shared input/display-format contracts. It does not own feature behavior. - `backend/http/` owns common authentication, request IDs, JSON/NDJSON responses, static delivery, streaming connection lifecycle, and error normalization. Feature-specific - transport handlers live beside their feature. - Exact POST endpoints that only delegate to one of those handlers use the explicit maps in - `backend/application.py`; endpoints with path parameters, body handling, or special error - semantics remain visible control flow in `RequestHandler`. + transport handlers live beside their feature. `backend/http/dispatch.py` owns only public + versus authenticated guard order, named POST dispatch, feature-route traversal, static + fallback, and final 404 responses. Exact POST maps live there; endpoint parsing, response + fields, and feature-specific exceptions belong to `backend/features//routes.py`. - `backend/features//` owns the mechanically moved service, repository, HTTP, agent, or deterministic calculation code for that product area. - `backend/data/` owns provider construction, source policy, provenance, units, freshness, coverage, display-versus-calculation eligibility, and shared numeric normalization policies. +- `backend/data/providers/tushare_client.py` is the stable public `TushareClient` facade and + owns only its dataclass fields and shared cache state. Tushare HTTP transport belongs to + `tushare_transport.py`; market overview and realtime breadth belong to + `tushare_dashboard.py`; indices belong to `tushare_indices.py`; Shenwan membership and + industry snapshots belong to `tushare_industries.py`; generic sector snapshots belong to + `tushare_sectors.py`; hot-money and dragon-tiger data belong to + `tushare_dragon_tiger.py`; stock detail and intraday data belong to `tushare_stocks.py`; + trading-calendar, daily, and limit-list access belong to `tushare_daily.py`; small shared + deterministic conversions belong to `tushare_helpers.py`. - `backend/database/` owns connection management, ordered migrations, and narrow repository adapters. Root `database.py` remains the legacy schema/composition anchor and combines the feature repository mixins; do not add feature queries to it. - `backend/jobs/` owns job definitions, locks, retries, idempotency, and persisted run state. + `backend/jobs/service.py` is the application-facing owner of scheduler start/stop, manual + refresh submission, and periodic refresh coordination. - `backend/llm/` owns model selection, membership/quota checks, fallback, provider transport, streaming rules, and call audit. Feature agents only prepare messages and interpret feature-specific results. -- `frontend/shared/` is the only browser API/state/Shell/component boundary. -- `frontend/pages/` owns page-local behavior. The original runtime was split mechanically; - source markers and preservation tests prove that the pieces reassemble to the audited - original, apart from explicitly registered trial retirements. -- `frontend/styles/`, `frontend/shared/tokens.css`, and the Wentian page stylesheet preserve - the approved cascade and light/dark/mobile behavior. +- `frontend/index.html` owns only the login layer, application Shell, overview strip, status + bar, global dialogs, and the single page-fragment mount point. `frontend/bootstrap.js` + loads the registered page fragments before the unchanged application runtime starts. +- `frontend/pages.config.js` is the only runtime owner of page-fragment paths and script + execution order. Do not add page scripts directly to `index.html` or create another loader. +- `frontend/app.js` is only the browser startup coordinator: initialize controls, resolve the + initial route, start the authenticated application, and invoke registered binding owners. + It must not own feature event handlers, dashboard rendering, account/admin behavior, theme + behavior, table behavior, or application state definitions. +- `frontend/shared/` is the only browser data-API/state/Shell/component boundary. Within it, + `context.js` owns application state and DOM handles, `application.js` owns API/Shell/page + lifecycle composition, `feedback.js` owns common feedback and motion, `dashboard.js` owns + market-dashboard refresh and date coordination, `session.js` owns authentication/account + access, `admin.js` owns system administration, `theme.js` owns theme switching, and + `table.js` owns generic table behavior. The Bootstrap fetch is limited to registered + same-origin static HTML fragments. +- `frontend/pages/` owns page-local markup, behavior, and styles through `page.html`, + `page.js`, and `foundation.css`. Each feature registers its own one-time control binder with + the page runtime; feature selectors and event handlers must not be added to `app.js`. The + original DOM and runtime were split mechanically during migration. Current maintenance is + governed by the runtime registry, unique symbol owners, DOM/API contracts, JavaScript syntax + checks, and Playwright behavior rather than embedded historical source ranges. +- `frontend/pages/market/` owns cross-page market presentation through narrow runtime modules: + `breadth.js`, `charts.js`, `entity-detail.js`, `stock-detail.js`, `preview.js`, `search.js`, + and `bindings.js`. `runtime.js` is retired; do not recreate a combined market runtime or a + compatibility loader. `pages.config.js` is the sole owner of their execution order. +- `backend/features/screener/engine.py` is the stable screener compatibility facade only. + Screener declarations belong to `catalog.py`; external factor synchronization belongs to + `data_sync.py`; deterministic technical and statistical helpers belong to `indicators.py`; + factor construction belongs to `factors.py`; formula validation, scoring, and local strategy + compilation belong to `formula.py`; market-phase identification belongs to `regime.py`; + screening execution and result persistence belong to `selection.py`; historical evaluation + belongs to `backtest.py`. +- `backend/features/heaven/service.py` is the stable Wentian service facade only. Manual + six-line input validation and safety gates belong to `manual.py`; trend setup, market mode, + source disclosure, and quality checks belong to `trend.py`; stock, index, and sector context + collection belongs to `market_context.py`; personal fields, hexagrams, saved readings, and + model interpretation belong to `readings.py`. These owners cooperate through the composed + service object and do not duplicate or delegate method bodies through the facade. +- Application-facing system credentials, data/LLM status, and administrator settings belong + to `backend/features/system/service.py`; account-context delegation belongs to + `backend/features/accounts/application.py`. They are composed into `DashboardService` and + must not return to the composition root. +- `backend/features/market/insights.py` is the stable public `MarketInsightsService` facade + only. Shared construction, trading context, stock master access, and concept parsing belong + to `insights_context.py`; auction scoring and candidate construction belong to + `insights_auction_scoring.py`; auction session, amount history, watchlist enrichment, and + live snapshots belong to `insights_auction_data.py`; auction result orchestration belongs to + `insights_auction.py`; theme library/detail behavior belongs to `insights_themes.py`; and hot + ranking behavior belongs to `insights_popularity.py`. +- `frontend/shared/tokens.css` owns global design semantics. Shared foundations live in + `frontend/shared/*.css` and `frontend/shared/components/*.css`; page foundations live beside + their page in `frontend/pages//foundation.css`. These 22 files replace the retired + `frontend/styles/styles.css`, four historical refinement layers, and the former Wentian + page stylesheet. Production loads only this canonical stack: every selector/context pair has + one owner, shared roots stay in shared files, and page-scoped rules stay beside their page. - `config/` is the versioned registry for pages, features, APIs, datasets, quality rules, jobs, and the generated candidate architecture inventory. -Root modules such as `screener.py`, `tushare_client.py`, and `mentor_agent.py` are compatibility -aliases to canonical modules. They contain no second implementation and remain only because -the original public import surface is part of the preservation contract. Canonical backend -modules must import other canonical modules directly rather than routing through these aliases. -The remaining `api_access` import in `backend/application.py` and preserved lazy -`sentiment_engine` import in the screener repository are registered transition boundaries; -the root `database.py` remains the documented schema/composition anchor. +The source root has four Python entry modules only: `server.py` starts and exports the process +surface, `database.py` remains the documented schema/composition anchor, `api_access.py` owns +the route-access registry entry, and `sync_data.py` is the manual synchronization command. +The 19 migration-only import aliases were retired after all internal and test consumers moved +to canonical `backend/` owners. Do not recreate root-level feature import shims. + +Generated local artifacts belong under `runtime/`: server output in `runtime/logs`, Python +cache in `runtime/cache`, and browser artifacts in `runtime/test-results`. Docker continues to +emit logs through its configured logging driver instead of writing into the source tree. ## Non-negotiable maintenance rules 1. Preserve account ownership in every user-private query and test it with two accounts. -2. Browser requests go through `frontend/shared/api.js`; provider calls go through the data - boundary; model calls go through `backend/llm/`. +2. Browser business-data requests go through `frontend/shared/api.js`; only + `frontend/bootstrap.js` may fetch registered static page fragments. Provider calls go + through the data boundary; model calls go through `backend/llm/`. 3. Calculation datasets fail closed when required source, date, unit, freshness, or coverage evidence is missing. Display fallbacks do not silently enter calculations. -4. Do not implement logic in both a root compatibility module and a canonical module. -5. Do not remove compatibility or uncertain code without reference scanning, old/new - differential evidence, browser checks, and manual acceptance. +4. Do not create root-level feature compatibility modules; import the canonical `backend/` + owner directly. +5. Do not remove uncertain code without reference scanning, old/new differential evidence, + browser checks, and manual acceptance. 6. Run `python tools/verify_baseline.py` for every change and add `--e2e` when runtime or frontend behavior can be affected. +7. Do not recreate late-loading `legacy.css`, `override.css`, `fix.css`, or page-wide patch + layers. Change the canonical shared or page owner and keep the CSS ownership tests green. +8. Do not put `workspace-view` roots back into `frontend/index.html`. Add or change page DOM + only in its registered `frontend/pages//page.html`, without introducing a second + fragment or runtime-script registry. +9. Do not add feature selectors, feature event listeners, shared state declarations, or + shared service implementations to `frontend/app.js`; extend the existing unique owner and + keep the startup-entry boundary tests green. +10. Do not merge market charts, previews, search, stock details, entity details, breadth, and + event binding back into one runtime file. Keep each definition in its registered owner and + keep the market runtime ownership test green. +11. Do not merge screener catalogs, data synchronization, indicators, factor construction, + formulas, regime detection, selection, and backtesting back into one engine. Keep + `backend/features/screener/engine.py` as a compatibility facade and preserve one canonical + owner for each responsibility. +12. Do not merge Tushare transport, dashboard, indices, Shenwan industries, sectors, + dragon-tiger data, stock detail, and daily-market access back into one client. Keep + `backend/data/providers/tushare_client.py` as the single public class facade, and do not + duplicate provider method bodies in that facade or another compatibility module. +13. Do not merge Wentian manual validation, trend orchestration, market-context collection, + and reading/LLM behavior back into one service. Keep + `backend/features/heaven/service.py` as a method-free composition facade and preserve one + canonical owner for every Wentian service method. +14. Do not merge auction scoring, auction data preparation, auction orchestration, themes, + popularity, and shared insight context back into one market-insights service. Keep + `backend/features/market/insights.py` as a method-free public facade and preserve one + canonical owner for every market-insight method. +15. Do not put feature route bodies, system settings behavior, account delegation, or job + lifecycle methods back into `backend/application.py`. Keep it as a composition root; keep + common HTTP guard/404 behavior in `backend/http/dispatch.py`; and keep endpoint-specific + parsing and responses in the corresponding `backend/features//routes.py`. +16. Do not add preservation source-range markers, copied historical CSS fragments, or a tool + that reconstructs the retired monolithic frontend. Historical maps remain evidence only; + current owners and behavior tests are the maintenance boundary. -The authoritative migration constraints and handoff procedure are in -`../docs/migration/原版保真迁移总纲.md` and -`../docs/migration/人工维护与本地切换指南.md`. +Current maintenance rules are in `AGENTS.md` and +`docs/maintenance/人工维护指南.md`. Historical migration constraints and evidence remain under +`docs/migration/` for audit only. diff --git a/DOCKER_DEPLOY.md b/DOCKER_DEPLOY.md index dc43d63..378050d 100644 --- a/DOCKER_DEPLOY.md +++ b/DOCKER_DEPLOY.md @@ -44,8 +44,8 @@ docker compose version ## 3. 迁移现有数据 -迁移前先停止当前 Windows 上的 `8765` 服务,避免复制过程中 SQLite 继续写入。 -然后在 `webapp` 目录执行一次 WAL 检查点: +迁移前先停止当前 Windows 服务,避免复制过程中 SQLite 继续写入。 +然后在应用目录执行一次 WAL 检查点: ```powershell python -c "import sqlite3; c=sqlite3.connect('data/review.db'); print(c.execute('PRAGMA wal_checkpoint(TRUNCATE)').fetchone()); c.close()" @@ -54,11 +54,11 @@ python -c "import sqlite3; c=sqlite3.connect('data/review.db'); print(c.execute( 结果第一项应为 `0`。必须迁移以下内容: ```text -webapp/data/ -webapp/.env -webapp/Dockerfile -webapp/compose.yaml -webapp/其余程序文件 +data/ +.env +Dockerfile +compose.yaml +其余程序文件 ``` 不要重新生成 `APP_ENCRYPTION_KEY`。部署已有数据库时,目标服务器 `.env` 中的 @@ -67,8 +67,8 @@ webapp/其余程序文件 可以在项目目录生成迁移包: ```powershell -tar --exclude='__pycache__' --exclude='*.log' --exclude='data/cache' -czf xiaobai-review.tar.gz -C webapp . -scp .\xiaobai-review.tar.gz 用户名@服务器IP:/tmp/ +tar --exclude='__pycache__' --exclude='*.log' --exclude='data/cache' -czf ..\xiaobai-review.tar.gz . +scp ..\xiaobai-review.tar.gz 用户名@服务器IP:/tmp/ ``` 迁移包包含数据库和密钥,传输完成后应及时删除两端的压缩包。 diff --git a/README.md b/README.md index f03fb7a..7a6ac8b 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,8 @@ 一个面向 A 股盘后复盘的本地 Web 工作台。后端使用 Python 访问 Tushare Pro,前端不依赖构建工具。 -本目录是从原版源码逐项移动、机械拆分并完成差分验证与用户人工验收的模块化正式源码, -不是依据规格书重新开发的第二套产品。正式部署切换前,`webapp/`根目录继续作为当前部署与 -回档基线;冻结的`next/`不得用于部署或后续开发。目录职责见[ARCHITECTURE.md](ARCHITECTURE.md)。 +本目录是经过保真迁移、结构治理和用户人工验收的唯一正式源码,不依赖父目录旧程序或失败版本。 +目录职责见[ARCHITECTURE.md](ARCHITECTURE.md),产品与维护文档见[docs/README.md](docs/README.md)。 当前包含集合竞价、涨停池、炸板池、跌停板、昨日涨停、涨停表现、市场天梯、板块轮动、题材库、人气热榜、龙虎榜和个人复盘工作区。交易日快照与同步记录保存在本地 SQLite 数据库 `data/review.db`。 @@ -31,13 +30,20 @@ ## 启动 ```powershell -cd webapp\app +cd app python -m pip install -r requirements.txt python server.py ``` 浏览器打开 `http://127.0.0.1:8765`,首次使用先注册账号。首个账号自动成为管理员,后续账号默认为普通用户。主行情不再回退演示数据:盘前、非交易日或临时取数失败时沿用最近真实收盘快照;没有任何真实快照时提示等待管理员完成首次同步。 +需要后台启动本地验收端口时,使用`tools/start_local.ps1`。该工具把日志、进程号和Python缓存 +统一写入`runtime/`,不在源码根目录产生运行文件: + +```powershell +powershell -ExecutionPolicy Bypass -File tools/start_local.ps1 -Port 8797 +``` + 局域网 Docker 部署使用 `Dockerfile` 与 `compose.yaml`,完整的迁移、持久化、 防火墙、备份和恢复步骤见 [DOCKER_DEPLOY.md](DOCKER_DEPLOY.md)。 @@ -59,7 +65,7 @@ Tushare 各接口有独立积分权限。程序优先使用 `limit_list_d` 获 ## 隔离实时聚合验证 -`realtime_aggregator.py` 用于验证东方财富、同花顺和选股宝网页数据源。它不写入 SQLite 主行情快照,也不参与情绪评分或智能选股;当 Tushare 实时指数权限不可用时,观势会使用东方财富三大指数和板块外显,并继续使用 Tushare 的板块成分内核与个股数据。 +`backend/data/realtime.py`用于验证东方财富、同花顺和选股宝网页数据源。它不写入 SQLite 主行情快照,也不参与情绪评分或智能选股;当 Tushare 实时指数权限不可用时,观势会使用东方财富三大指数和板块外显,并继续使用 Tushare 的板块成分内核与个股数据。 登录后可调用: diff --git a/advanced_strategies.py b/advanced_strategies.py deleted file mode 100644 index fcb16c9..0000000 --- a/advanced_strategies.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Compatibility alias for the canonical curated strategy library.""" - -import sys - -from backend.features.screener import strategies as _implementation - -sys.modules[__name__] = _implementation diff --git a/alert_service.py b/alert_service.py deleted file mode 100644 index f4264ee..0000000 --- a/alert_service.py +++ /dev/null @@ -1,3 +0,0 @@ -from backend.features.alerts.service import AlertService - -__all__ = ["AlertService"] diff --git a/app_config.py b/app_config.py deleted file mode 100644 index 0ec4284..0000000 --- a/app_config.py +++ /dev/null @@ -1,3 +0,0 @@ -"""Compatibility imports for code that still uses the original configuration module.""" - -from backend.bootstrap.config import * # noqa: F401,F403 diff --git a/assistant_agent.py b/assistant_agent.py deleted file mode 100644 index ba1b10f..0000000 --- a/assistant_agent.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Compatibility alias for the canonical review-assistant implementation.""" - -import sys - -from backend.features.review import agent as _implementation - -sys.modules[__name__] = _implementation diff --git a/backend/application.py b/backend/application.py index 4ed9570..d9b6121 100644 --- a/backend/application.py +++ b/backend/application.py @@ -1,54 +1,63 @@ from __future__ import annotations -import json -import re -import secrets import threading -import time -from datetime import date, datetime, time as dt_time, timedelta, timezone -from http import HTTPStatus +from datetime import datetime from http.server import BaseHTTPRequestHandler -from typing import Any -from urllib.parse import parse_qs, unquote, urlparse from api_access import ROUTES +from backend.bootstrap.config import DATA_DIR, MENTOR_SKILLS_DIR, PRIVATE_MENTOR_SKILLS_DIR from backend.bootstrap.container import build_application_container from backend.bootstrap.settings import load_runtime_settings -from backend.http import HttpTransportMixin -from backend.llm import LLMGateway, LLMGatewayError -from backend.llm.http import LLMHttpMixin -from backend.llm.service import LLMServiceMixin -from backend.features.market import ChartDataError, MarketServiceMixin -from backend.features.heaven import HeavenHttpMixin, HeavenServiceMixin, build_personal_field -from backend.features.alerts import AlertHttpMixin, AlertServiceMixin -from backend.features.review import ReviewHttpMixin, ReviewServiceMixin -from backend.bootstrap.config import ( - DATA_DIR, - MENTOR_SKILLS_DIR, - PRIVATE_MENTOR_SKILLS_DIR, - TOKEN_PATTERN, - normalize_date, - validate_text, -) -from database import ReviewDatabase +from backend.data.providers.tushare_client import TushareError +from backend.features.accounts.application import AccountApplicationMixin from backend.features.accounts.http import AccountHttpMixin +from backend.features.accounts.routes import AccountRoutesMixin from backend.features.accounts.security import SecretVault from backend.features.accounts.service import AccountService +from backend.features.alerts import AlertHttpMixin, AlertServiceMixin +from backend.features.alerts.routes import AlertRoutesMixin from backend.features.auction import AuctionServiceMixin +from backend.features.auction.routes import AuctionRoutesMixin from backend.features.dragon_tiger import DragonTigerServiceMixin +from backend.features.dragon_tiger.routes import DragonTigerRoutesMixin +from backend.features.heaven import HeavenHttpMixin, HeavenServiceMixin, build_personal_field +from backend.features.heaven.routes import HeavenRoutesMixin +from backend.features.market import MarketServiceMixin +from backend.features.market.routes import MarketRoutesMixin from backend.features.mentor import MentorHttpMixin, MentorServiceMixin +from backend.features.mentor.routes import MentorRoutesMixin from backend.features.pools import PoolServiceMixin +from backend.features.pools.routes import PoolRoutesMixin from backend.features.popularity import PopularityServiceMixin +from backend.features.popularity.routes import PopularityRoutesMixin +from backend.features.review import ReviewHttpMixin, ReviewServiceMixin +from backend.features.review.routes import ReviewRoutesMixin from backend.features.rotation import RotationServiceMixin +from backend.features.rotation.routes import RotationRoutesMixin +from backend.features.screener.routes import ScreenerRoutesMixin from backend.features.screener.service import ( SCREENER_LIBRARY_VERSION, ScreenerServiceMixin, automatic_screener_jobs, ) from backend.features.sentiment import SentimentServiceMixin +from backend.features.sentiment.routes import SentimentRoutesMixin from backend.features.system import SystemHttpMixin +from backend.features.system.routes import SystemRoutesMixin +from backend.features.system.service import SystemServiceMixin from backend.features.themes import ThemeServiceMixin -from backend.data.providers.tushare_client import TushareError +from backend.features.themes.routes import ThemeRoutesMixin +from backend.http import HttpTransportMixin +from backend.http.dispatch import ( + AUTHENTICATED_POST_HANDLERS, + PUBLIC_POST_HANDLERS, + ApplicationHttpDispatchMixin, +) +from backend.jobs.service import JobServiceMixin +from backend.llm import LLMGateway +from backend.llm.http import LLMHttpMixin +from backend.llm.service import LLMServiceMixin +from database import ReviewDatabase LEGACY_SECRET_KEYS = { @@ -66,7 +75,11 @@ LEGACY_SECRET_KEYS = { "LLM_FALLBACK_MODEL", } + class DashboardService( + SystemServiceMixin, + AccountApplicationMixin, + JobServiceMixin, MarketServiceMixin, SentimentServiceMixin, PoolServiceMixin, @@ -129,392 +142,26 @@ class DashboardService( ) self.screener.ensure_builtin_strategies() - def start_background_jobs(self) -> threading.Thread: - return self.jobs.start_scheduler( - self._background_refresh_tick, - interval_seconds=5, - initial_delay_seconds=3, - ) - - def stop_background_jobs(self, timeout_seconds: float = 5) -> bool: - scheduler_stopped = self.jobs.stop_scheduler(timeout_seconds) - workers_stopped = self.jobs.wait_for_idle(timeout_seconds) - return scheduler_stopped and workers_stopped - - - def _load_system_credentials(self, environment: dict[str, str]) -> dict[str, Any]: - encrypted = self.database.get_system_setting("credentials") - current = self.vault.decrypt_json(encrypted) if encrypted else {} - changed = False - first_user_id = self.database.first_user_id() - first_personal: dict[str, Any] = {} - if first_user_id: - first_encrypted = self.database.get_user_credentials(first_user_id) - first_personal = self.vault.decrypt_json(first_encrypted) if first_encrypted else {} - defaults = { - "tushare_token": environment.get("tushare_token") or first_personal.get("tushare_token") or "", - "ifind_refresh_token": environment.get("ifind_refresh_token") or "", - "ifind_access_token": environment.get("ifind_access_token") or "", - "platform_llm_primary_api_key": environment.get("platform_llm_primary_api_key") or first_personal.get("llm_primary_api_key") or "", - "platform_llm_primary_base_url": environment.get("platform_llm_primary_base_url") or first_personal.get("llm_primary_base_url") or "https://api.openai.com/v1", - "platform_llm_primary_model": environment.get("platform_llm_primary_model") or first_personal.get("llm_primary_model") or "", - "platform_llm_fallback_api_key": environment.get("platform_llm_fallback_api_key") or first_personal.get("llm_fallback_api_key") or "", - "platform_llm_fallback_base_url": environment.get("platform_llm_fallback_base_url") or first_personal.get("llm_fallback_base_url") or "", - "platform_llm_fallback_model": environment.get("platform_llm_fallback_model") or first_personal.get("llm_fallback_model") or "", - "member_daily_limit": 50, - "background_refresh_enabled": True, - } - for key, value in defaults.items(): - if key not in current: - current[key] = value - changed = True - if not isinstance(current.get("llm_models"), list): - migrated_models: list[dict[str, str]] = [] - for role, label in (("primary", "原主模型"), ("fallback", "原辅助模型")): - profile = { - "api_key": str(current.get(f"platform_llm_{role}_api_key") or ""), - "base_url": str(current.get(f"platform_llm_{role}_base_url") or ""), - "model": str(current.get(f"platform_llm_{role}_model") or ""), - } - if profile["api_key"] or profile["model"]: - model_id = f"migrated-{role}" - migrated_models.append( - {"id": model_id, "name": label, **profile} - ) - current[f"{role}_model_id"] = model_id - current["llm_models"] = migrated_models - current.setdefault("primary_model_id", "") - current.setdefault("fallback_model_id", "") - changed = True - if changed or not encrypted: - self.database.save_system_setting("credentials", self.vault.encrypt_json(current)) - for row in self.database.list_user_credentials(): - personal = self.vault.decrypt_json(str(row.get("encrypted_payload") or "")) - if "tushare_token" in personal: - personal.pop("tushare_token", None) - self.database.save_user_credentials( - int(row["user_id"]), self.vault.encrypt_json(personal) - ) - return current - - def _save_system_credentials(self, credentials: dict[str, Any]) -> None: - with self.system_lock: - self.database.save_system_setting("credentials", self.vault.encrypt_json(credentials)) - self._system_credentials = dict(credentials) - if hasattr(self, "ifind"): - self.ifind.set_credentials( - str(credentials.get("ifind_refresh_token") or ""), - str(credentials.get("ifind_access_token") or ""), - ) - - @property - def configured(self) -> bool: - return bool(self.token) - - def bind_user(self, user_id: int) -> None: - self._request_context.user_id = int(user_id) - encrypted = self.database.get_user_credentials(int(user_id)) - self._request_context.credentials = self.vault.decrypt_json(encrypted) if encrypted else {} - self._request_context.access = self.database.user_access(int(user_id)) or {} - - @property - def current_user_id(self) -> int: - user_id = getattr(self._request_context, "user_id", 0) - if not user_id: - raise ValueError("当前请求尚未绑定账号。") - return int(user_id) - - def _credentials(self) -> dict[str, str]: - credentials = getattr(self._request_context, "credentials", {}) - return { - "llm_primary_api_key": str(credentials.get("llm_primary_api_key") or ""), - "llm_primary_base_url": str( - credentials.get("llm_primary_base_url") or "https://api.openai.com/v1" - ), - "llm_primary_model": str(credentials.get("llm_primary_model") or ""), - "llm_fallback_api_key": str(credentials.get("llm_fallback_api_key") or ""), - "llm_fallback_base_url": str(credentials.get("llm_fallback_base_url") or ""), - "llm_fallback_model": str(credentials.get("llm_fallback_model") or ""), - } - - def _save_credentials(self, credentials: dict[str, str]) -> None: - self.database.save_user_credentials( - self.current_user_id, - self.vault.encrypt_json(credentials), - ) - self._request_context.credentials = dict(credentials) - - @property - def token(self) -> str: - return str(self._system_credentials.get("tushare_token") or "") - - - def membership(self) -> dict[str, Any]: - return self.accounts.membership() - - - def system_status(self) -> dict[str, Any]: - platform = self._platform_llm_profile() - model_pool = [] - for item in self._system_credentials.get("llm_models") or []: - if not isinstance(item, dict): - continue - profile = { - "api_key": str(item.get("api_key") or ""), - "base_url": str(item.get("base_url") or ""), - "model": str(item.get("model") or ""), - } - model_pool.append( - { - "id": str(item.get("id") or ""), - "name": str(item.get("name") or ""), - "base_url": profile["base_url"], - "model": profile["model"], - "configured": self._profile_configured(profile), - } - ) - return { - "data": { - "configured": self.configured, - "ifind": self.ifind.status(), - "background_refresh_enabled": bool( - self._system_credentials.get("background_refresh_enabled", True) - ), - **self.database.status(), - "jobs": self.jobs.repository.recent(12), - }, - "llm": { - "primary_configured": self._profile_configured(platform["primary"]), - "fallback_configured": self._profile_configured(platform["fallback"]), - "models": model_pool, - "primary_model_id": str(self._system_credentials.get("primary_model_id") or ""), - "fallback_model_id": str(self._system_credentials.get("fallback_model_id") or ""), - }, - "membership": { - "member_daily_limit": max( - 1, int(self._system_credentials.get("member_daily_limit") or 50) - ) - }, - } - - def save_system_settings(self, payload: dict[str, Any]) -> dict[str, Any]: - current = dict(self._system_credentials) - token = str(payload.get("tushare_token") or current.get("tushare_token") or "").strip() - if token and not TOKEN_PATTERN.fullmatch(token): - raise ValueError("Tushare Token 格式不正确。") - ifind_refresh_token = str( - payload.get("ifind_refresh_token") - or current.get("ifind_refresh_token") - or "" - ).strip() - if ifind_refresh_token and ( - len(ifind_refresh_token) > 2048 - or any(character.isspace() for character in ifind_refresh_token) - ): - raise ValueError("iFinD Refresh Token 格式不正确。") - existing_models = { - str(item.get("id") or ""): item - for item in current.get("llm_models") or [] - if isinstance(item, dict) and item.get("id") - } - raw_models = payload.get("models") - models: list[dict[str, str]] = [] - if raw_models is not None: - if not isinstance(raw_models, list) or len(raw_models) > 20: - raise ValueError("模型池格式不正确,最多可保存 20 个模型。") - seen_ids: set[str] = set() - seen_names: set[str] = set() - for index, raw in enumerate(raw_models, start=1): - if not isinstance(raw, dict): - raise ValueError("模型池条目格式不正确。") - model_id = str(raw.get("id") or f"model-{secrets.token_hex(6)}").strip() - if not re.fullmatch(r"[A-Za-z0-9_-]{3,80}", model_id) or model_id in seen_ids: - raise ValueError("模型 ID 不正确或重复。") - name = validate_text(raw.get("name"), f"模型 {index} 名称", 50, required=True) - normalized_name = name.casefold() - if normalized_name in seen_names: - raise ValueError("模型名称不能重复。") - profile = self._validate_llm_profile( - raw, - existing_models.get(model_id) or {}, - required=True, - label=name, - ) - models.append({"id": model_id, "name": name, **profile}) - seen_ids.add(model_id) - seen_names.add(normalized_name) - else: - models = [dict(item) for item in existing_models.values()] - model_ids = {item["id"] for item in models} - primary_model_id = str( - payload.get("primary_model_id", current.get("primary_model_id") or "") or "" - ).strip() - fallback_model_id = str( - payload.get("fallback_model_id", current.get("fallback_model_id") or "") or "" - ).strip() - if models and primary_model_id not in model_ids: - raise ValueError("请从模型池选择主模型。") - if not models: - primary_model_id = "" - fallback_model_id = "" - if fallback_model_id and fallback_model_id not in model_ids: - raise ValueError("辅助模型不在模型池中。") - if fallback_model_id and fallback_model_id == primary_model_id: - raise ValueError("主模型与辅助模型不能相同。") - try: - daily_limit = max( - 1, - min( - 1000, - int(payload.get("member_daily_limit", current.get("member_daily_limit") or 50)), - ), - ) - except (TypeError, ValueError) as exc: - raise ValueError("会员每日额度应为 1 至 1000。") from exc - current.update( - { - "tushare_token": token, - "ifind_refresh_token": ifind_refresh_token, - "llm_models": models, - "primary_model_id": primary_model_id, - "fallback_model_id": fallback_model_id, - "member_daily_limit": daily_limit, - "background_refresh_enabled": bool( - payload.get( - "background_refresh_enabled", - current.get("background_refresh_enabled", True), - ) - ), - } - ) - self._save_system_credentials(current) - return self.system_status() - - - def admin_users(self) -> list[dict[str, Any]]: - return self.accounts.admin_users(self._platform_usage_today_for_user) - - def update_membership(self, payload: dict[str, Any]) -> None: - self.accounts.update_membership(payload) - - def request_background_sync(self, trade_date: str) -> bool: - normalized = normalize_date(trade_date) - key = f"manual:{normalized}:{time.time_ns()}" - return self.jobs.submit( - "market.refresh", - key, - lambda: self.sync_dashboard(normalized), - {"trade_date": normalized, "trigger": "administrator"}, - ) - - def _background_refresh_tick(self) -> None: - if not ( - self.configured - and self._system_credentials.get("background_refresh_enabled", True) - ): - return - today = date.today().strftime("%Y%m%d") - snapshot = self.database.get_snapshot(today) or {} - if self._realtime_snapshot_due(today, snapshot): - bucket = int(time.time() // 5) - self.jobs.submit( - "market.refresh", - f"realtime:{today}:{bucket}", - lambda: self.sync_dashboard(today), - {"trade_date": today, "trigger": "realtime-poll"}, - ) - self._schedule_automatic_screeners(today, snapshot) - - def register_account(self, username: str, password: str) -> dict[str, Any]: - return self.accounts.register(username, password) - - def login_account(self, username: str, password: str) -> dict[str, Any]: - return self.accounts.login(username, password) - - def change_password(self, current_password: str, new_password: str) -> None: - self.accounts.change_password(current_password, new_password) - - def create_account_session(self, user: dict[str, Any]) -> dict[str, Any]: - return self.accounts.create_session(user) - - @staticmethod - def _validate_account_input(username: str, password: str) -> None: - AccountService.validate_input(username, password) - - def save_birth_profile(self, payload: dict[str, Any]) -> dict[str, Any]: - return self.accounts.save_birth_profile(payload) - - def stored_birth_profile(self) -> dict[str, str] | None: - return self.accounts.stored_birth_profile() - - def account_personal_field( - self, - current_date: str, - current_field: dict[str, Any], - public: bool = False, - ) -> dict[str, Any] | None: - return self.accounts.personal_field(current_date, current_field, public) - - @staticmethod - def _public_personal_profile(personal: dict[str, Any]) -> dict[str, Any]: - return AccountService.public_personal_profile(personal) - - - - - def status(self) -> dict[str, Any]: - llm_access = self.llm_access_status() - return { - "configured": self.configured, - "mode": "tushare" if self.configured else "unavailable", - "llm_configured": self.llm_configured, - "llm_model": self.llm_primary_model if self.llm_configured else "", - "llm_fallback_configured": self.llm_fallback_configured, - "llm_fallback_model": self.llm_fallback_model if self.llm_fallback_configured else "", - "llm_access": llm_access, - "birth_profile_configured": bool(self.stored_birth_profile()), - "birth_profile": self.stored_birth_profile(), - **self.database.status(), - } SERVICE = DashboardService() -PUBLIC_POST_HANDLERS = { - "/api/auth/register": "auth_register", - "/api/auth/login": "auth_login", -} - -AUTHENTICATED_POST_HANDLERS = { - "/api/auth/logout": "auth_logout", - "/api/account/birth-profile": "save_birth_profile", - "/api/account/password": "change_password", - "/api/alerts": "save_alert", - "/api/trades": "save_trade_entry", - "/api/assistant/chat": "stream_assistant_chat", - "/api/admin/settings": "save_system_settings", - "/api/admin/settings/test": "test_system_llm_settings", - "/api/admin/membership": "save_membership", - "/api/admin/refresh": "start_background_refresh", - "/api/watchlist": "save_watchlist", - "/api/notes": "save_note", - "/api/reasons": "save_reason", - "/api/seat-aliases": "save_seat_alias", - "/api/heaven/sector-phases": "save_sector_phase_override", - "/api/backfill": "backfill_data", - "/api/screener/sync": "sync_screener_data", - "/api/screener/compile": "compile_screener_strategy", - "/api/screener/strategies": "save_screener_strategy", - "/api/screener/run": "run_screener", - "/api/screener/tracking/refresh": "refresh_screener_tracking", - "/api/mentors/chat": "stream_mentor_chat", - "/api/heaven/hexagram": "heaven_hexagram", - "/api/heaven/personal": "heaven_personal", - "/api/heaven/interpret": "heaven_interpret", -} - - class RequestHandler( + SystemRoutesMixin, + AccountRoutesMixin, + AlertRoutesMixin, + ReviewRoutesMixin, + MarketRoutesMixin, + AuctionRoutesMixin, + ThemeRoutesMixin, + PopularityRoutesMixin, + SentimentRoutesMixin, + RotationRoutesMixin, + DragonTigerRoutesMixin, + ScreenerRoutesMixin, + MentorRoutesMixin, + HeavenRoutesMixin, + PoolRoutesMixin, AccountHttpMixin, SystemHttpMixin, MentorHttpMixin, @@ -522,571 +169,10 @@ class RequestHandler( AlertHttpMixin, ReviewHttpMixin, LLMHttpMixin, + ApplicationHttpDispatchMixin, HttpTransportMixin, BaseHTTPRequestHandler, ): server_version = "XiaobaiReviewWeb/0.8" application_service = SERVICE route_registry = ROUTES - - def _dispatch_named_handler(self, path: str, handlers: dict[str, str]) -> bool: - handler_name = handlers.get(path) - if handler_name is None: - return False - getattr(self, handler_name)() - return True - - def do_GET(self) -> None: - parsed = urlparse(self.path) - if parsed.path == "/api/health": - self.send_json( - { - "ok": True, - "storage": "sqlite", - "account_required": True, - "time": datetime.now().astimezone().isoformat(timespec="seconds"), - } - ) - return - if parsed.path == "/api/auth/me": - self.auth_me() - return - if parsed.path.startswith("/api/"): - if not self.require_auth(): - return - if not self.require_access("GET", parsed.path): - return - if parsed.path == "/api/admin/settings": - self.send_json( - {"ok": True, **SERVICE.system_status(), "users": SERVICE.admin_users()} - ) - return - if parsed.path == "/api/account/status": - self.send_json({"ok": True, **SERVICE.status()}) - return - if parsed.path == "/api/alerts": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.alert_center( - query.get("status", ["all"])[0], - query.get("as_of", [date.today().isoformat()])[0], - ) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/trades": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.trade_entries( - query.get("start_date", [""])[0], - query.get("end_date", [""])[0], - query.get("code", [""])[0], - ) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/assistant/messages": - self.send_json({"items": SERVICE.assistant_messages()}) - return - if parsed.path == "/api/dashboard": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - self.send_json(SERVICE.get_dashboard(trade_date, False)) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - except Exception as exc: - self.send_json({"error": f"数据加载失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) - return - if parsed.path == "/api/auction": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.auction_center( - query.get("trade_date", [date.today().isoformat()])[0], - query.get("force", ["0"])[0] == "1", - ) - ) - except (ValueError, TushareError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/themes": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.theme_library( - query.get("trade_date", [date.today().isoformat()])[0], - query.get("force", ["0"])[0] == "1", - ) - ) - except (ValueError, TushareError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/themes/detail": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.theme_detail( - query.get("code", [""])[0], - query.get("trade_date", [date.today().isoformat()])[0], - ) - ) - except (ValueError, TushareError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/popularity": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.popularity( - query.get("trade_date", [date.today().isoformat()])[0], - query.get("force", ["0"])[0] == "1", - ) - ) - except (ValueError, TushareError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/realtime-aggregate/health": - query = parse_qs(parsed.query) - try: - self.send_json( - { - "ok": True, - "aggregate": SERVICE.realtime_aggregate_health( - query.get("sector", [""])[0] - ), - } - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/sentiment/history": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - limit = int(query.get("limit", ["20"])[0]) - self.send_json(SERVICE.sentiment_history(trade_date, limit)) - except (TypeError, ValueError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/rotation/history": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - self.send_json(SERVICE.rotation_history(trade_date, 9)) - except (TypeError, ValueError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/rotation/members": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.rotation_sector_members( - query.get("trade_date", [date.today().isoformat()])[0], - query.get("sector", [""])[0], - ) - ) - except (TypeError, ValueError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/dragon-tiger": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - force = query.get("force", ["0"])[0] == "1" - try: - self.send_json(SERVICE.get_dragon_tiger(trade_date, force)) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/dragon-tiger/profiles": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.get_hot_money_profiles( - query.get("force", ["0"])[0] == "1" - ) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/search": - query = parse_qs(parsed.query) - search_query = query.get("q", [""])[0] - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - self.send_json(SERVICE.search_entities(search_query, trade_date)) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/search/detail": - query = parse_qs(parsed.query) - entity_type = query.get("type", [""])[0] - identifier = query.get("id", [""])[0] - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - self.send_json( - SERVICE.get_search_detail(entity_type, identifier, trade_date) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - except TushareError as exc: - self.send_json({"error": f"行情加载失败:{exc}"}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/chart/intraday": - query = parse_qs(parsed.query) - entity_type = query.get("type", [""])[0] - identifier = query.get("id", [""])[0] - try: - self.send_json(SERVICE.get_intraday_chart(entity_type, identifier)) - except (ValueError, ChartDataError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - stock_preview_match = re.fullmatch(r"/api/stock/(\d{6})/preview", parsed.path) - if stock_preview_match: - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - force = query.get("force", ["0"])[0] == "1" - try: - self.send_json( - SERVICE.get_stock_preview(stock_preview_match.group(1), trade_date, force) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - stock_match = re.fullmatch(r"/api/stock/(\d{6})", parsed.path) - if stock_match: - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - force = query.get("force", ["0"])[0] == "1" - try: - self.send_json(SERVICE.get_stock_detail(stock_match.group(1), trade_date, force)) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/watchlist": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.review_watchlist( - query.get("trade_date", [date.today().isoformat()])[0] - ) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/notes": - query = parse_qs(parsed.query) - code = query.get("code", [""])[0] - trade_date = query.get("trade_date", [""])[0].replace("-", "") - scope = query.get("scope", ["all"])[0] - if scope not in {"all", "daily", "stock"}: - self.send_json({"error": "复盘记录范围不支持。"}, HTTPStatus.BAD_REQUEST) - return - self.send_json( - { - "items": SERVICE.database.list_notes( - SERVICE.current_user_id, code, trade_date, scope - ) - } - ) - return - if parsed.path == "/api/seat-aliases": - self.send_json({"items": SERVICE.database.list_seat_aliases()}) - return - if parsed.path == "/api/screener/setup": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - self.send_json(SERVICE.screener_setup(trade_date)) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/screener/tracking": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.screener_tracking(int(query.get("limit", ["12"])[0])) - ) - except (TypeError, ValueError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/mentors/setup": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - try: - self.send_json(SERVICE.mentor_setup(trade_date)) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/mentors/messages": - query = parse_qs(parsed.query) - try: - self.send_json( - { - "items": SERVICE.mentor_messages( - query.get("mentor_id", [""])[0], - query.get("trade_date", [date.today().isoformat()])[0], - ) - } - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/heaven/readings": - query = parse_qs(parsed.query) - try: - self.send_json( - SERVICE.heaven_readings( - query.get("mode", [""])[0], - query.get("context_date", [""])[0], - int(query.get("limit", ["100"])[0]), - ) - ) - except (TypeError, ValueError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/heaven/setup": - query = parse_qs(parsed.query) - trade_date = query.get("trade_date", [date.today().isoformat()])[0] - sector_name = query.get("sector", [""])[0] - stock_code = query.get("stock_code", [""])[0] - manual_data = None - manual_text = query.get("manual_data", [""])[0] - if manual_text: - try: - manual_data = json.loads(manual_text) - except json.JSONDecodeError: - self.send_json({"error": "六爻补录数据格式不正确。"}, HTTPStatus.BAD_REQUEST) - return - try: - self.send_json( - SERVICE.heaven_setup( - trade_date, - sector_name, - stock_code, - manual_data, - ) - ) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - self.serve_static(parsed.path) - - def do_POST(self) -> None: - parsed = urlparse(self.path) - if self._dispatch_named_handler(parsed.path, PUBLIC_POST_HANDLERS): - return - if not self.require_auth() or not self.require_csrf(): - return - if not self.require_access("POST", parsed.path): - return - if self._dispatch_named_handler(parsed.path, AUTHENTICATED_POST_HANDLERS): - return - alert_read_match = re.fullmatch(r"/api/alerts/(\d+)/read", parsed.path) - if alert_read_match: - self.send_json( - {"ok": True, **SERVICE.mark_alert_read(int(alert_read_match.group(1)))} - ) - return - if parsed.path == "/api/alerts/read-all": - body = self.read_json_body(True) - self.send_json( - {"ok": True, **SERVICE.mark_all_alerts_read(str(body.get("as_of") or ""))} - ) - return - if parsed.path == "/api/screener/tracking": - try: - result = SERVICE.add_screener_tracking(self.read_json_body()) - self.send_json({"ok": True, **result}) - except (ValueError, json.JSONDecodeError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - if parsed.path == "/api/mentors/preferences": - try: - result = SERVICE.save_mentor_preferences(self.read_json_body()) - self.send_json({"ok": True, **result}) - except (ValueError, json.JSONDecodeError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - self.send_json({"error": "Not found"}, HTTPStatus.NOT_FOUND) - - def do_DELETE(self) -> None: - parsed = urlparse(self.path) - if not self.require_auth() or not self.require_csrf(): - return - if not self.require_access("DELETE", parsed.path): - return - if parsed.path == "/api/account/birth-profile": - deleted = SERVICE.database.delete_user_birth_profile(SERVICE.current_user_id) - self.send_json({"ok": True, "deleted": deleted}) - return - if parsed.path == "/api/assistant/messages": - deleted = SERVICE.clear_assistant_messages() - self.send_json({"ok": True, "deleted": deleted}) - return - if parsed.path == "/api/mentors/messages": - query = parse_qs(parsed.query) - try: - deleted = SERVICE.clear_mentor_messages( - query.get("mentor_id", [""])[0], - query.get("trade_date", [date.today().isoformat()])[0], - ) - self.send_json({"ok": True, "deleted": deleted}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - strategy_match = re.fullmatch(r"/api/screener/strategies/(\d+)", parsed.path) - if strategy_match: - try: - result = SERVICE.delete_screener_strategy(int(strategy_match.group(1))) - self.send_json({"ok": True, **result}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - return - tracking_match = re.fullmatch(r"/api/screener/tracking/(\d+)", parsed.path) - if tracking_match: - result = SERVICE.remove_screener_tracking(int(tracking_match.group(1))) - self.send_json({"ok": True, **result}) - return - watchlist_match = re.fullmatch(r"/api/watchlist/(\d{6})", parsed.path) - if watchlist_match: - deleted = SERVICE.database.delete_watchlist( - SERVICE.current_user_id, watchlist_match.group(1) - ) - self.send_json({"ok": True, "deleted": deleted}) - return - note_match = re.fullmatch(r"/api/notes/(\d+)", parsed.path) - if note_match: - deleted = SERVICE.database.delete_note( - SERVICE.current_user_id, int(note_match.group(1)) - ) - self.send_json({"ok": True, "deleted": deleted}) - return - alert_match = re.fullmatch(r"/api/alerts/(\d+)", parsed.path) - if alert_match: - self.send_json( - {"ok": True, **SERVICE.delete_alert(int(alert_match.group(1)))} - ) - return - trade_match = re.fullmatch(r"/api/trades/(\d+)", parsed.path) - if trade_match: - self.send_json( - {"ok": True, **SERVICE.delete_trade_entry(int(trade_match.group(1)))} - ) - return - heaven_reading_match = re.fullmatch(r"/api/heaven/readings/(\d+)", parsed.path) - if heaven_reading_match: - deleted = SERVICE.database.delete_heaven_reading( - SERVICE.current_user_id, int(heaven_reading_match.group(1)) - ) - self.send_json({"ok": True, "deleted": deleted}) - return - sector_phase_match = re.fullmatch(r"/api/heaven/sector-phases/(.+)", parsed.path) - if sector_phase_match: - name = unquote(sector_phase_match.group(1)).strip() - deleted = SERVICE.database.delete_sector_phase_override(name) - self.send_json({"ok": True, "deleted": deleted}) - return - self.send_json({"error": "Not found"}, HTTPStatus.NOT_FOUND) - - def save_reason(self) -> None: - try: - body = self.read_json_body() - SERVICE.save_reason( - str(body.get("trade_date") or ""), - str(body.get("code") or ""), - str(body.get("reason") or ""), - ) - self.send_json({"ok": True}) - except (ValueError, json.JSONDecodeError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - - def save_seat_alias(self) -> None: - try: - body = self.read_json_body() - seat_name = validate_text(body.get("seat_name"), "席位名称", 200, required=True) - alias = validate_text(body.get("alias"), "席位别名", 50, required=True) - SERVICE.database.save_seat_alias(seat_name, alias) - self.send_json({"ok": True}) - except (ValueError, json.JSONDecodeError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - - def save_sector_phase_override(self) -> None: - try: - body = self.read_json_body() - name = validate_text(body.get("name"), "行业或题材名称", 50, required=True) - element = str(body.get("element") or "").strip() - if element not in {"木", "火", "土", "金", "水"}: - raise ValueError("五行归类必须是木、火、土、金或水。") - SERVICE.database.save_sector_phase_override(name, element) - self.send_json({"ok": True}) - except (ValueError, json.JSONDecodeError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - - def backfill_data(self) -> None: - try: - body = self.read_json_body() - results = SERVICE.backfill( - str(body.get("start_date") or ""), - str(body.get("end_date") or ""), - ) - self.send_json({"ok": True, "results": results}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - except Exception as exc: - self.send_json({"error": f"历史回补失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) - - def sync_screener_data(self) -> None: - try: - body = self.read_json_body() - result = SERVICE.sync_screener_data( - str(body.get("trade_date") or date.today().isoformat()), - int(body.get("lookback") or 45), - ) - self.send_json({"ok": True, "result": result}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - except Exception as exc: - self.send_json({"error": f"因子数据同步失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) - - def compile_screener_strategy(self) -> None: - try: - body = self.read_json_body() - result = SERVICE.compile_screener_strategy( - str(body.get("prompt") or ""), str(body.get("regime") or "") - ) - self.send_json({"ok": True, "strategy": result}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - - def save_screener_strategy(self) -> None: - try: - body = self.read_json_body() - result = SERVICE.save_screener_strategy(body) - self.send_json({"ok": True, **result}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - - def run_screener(self) -> None: - try: - body = self.read_json_body() - result = SERVICE.run_screener(body) - self.send_json({"ok": True, "result": result}) - except ValueError as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - except Exception as exc: - self.send_json({"error": f"选股执行失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) - - def refresh_screener_tracking(self) -> None: - try: - body = self.read_json_body(True) - trade_date = str(body.get("trade_date") or date.today().isoformat()) - self.send_json({"ok": True, **SERVICE.refresh_screener_tracking(trade_date)}) - except (ValueError, json.JSONDecodeError) as exc: - self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) - except Exception as exc: - self.send_json({"error": f"跟踪刷新失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) diff --git a/backend/data/providers/tushare_client.py b/backend/data/providers/tushare_client.py index 4c071b9..8b8d5b5 100644 --- a/backend/data/providers/tushare_client.py +++ b/backend/data/providers/tushare_client.py @@ -1,30 +1,60 @@ from __future__ import annotations -import json -import math -import re -import urllib.error -import urllib.request -from collections import Counter from dataclasses import dataclass -from datetime import datetime, time as dt_time, timedelta from threading import Lock from typing import Any, ClassVar from backend.bootstrap.config import display_compact_date as _display_date from backend.data.numbers import finite_number as _number -from backend.features.sentiment.engine import apply_sentiment_to_dashboard - - -TUSHARE_URL = "http://api.tushare.pro" - - -class TushareError(RuntimeError): - pass +from backend.data.providers.tushare_daily import DailyMarketMixin +from backend.data.providers.tushare_dashboard import ( + DashboardMixin, + _build_ladders, + _build_limit_performance, + _build_overview, + _build_sector_rotation, + _build_sectors, + _build_yesterday_performance, +) +from backend.data.providers.tushare_dragon_tiger import DragonTigerMixin +from backend.data.providers.tushare_helpers import ( + _display_time, + _prices_equal, + _realtime_market_status, + _text, + _trading_session_progress, + _value_percentile, +) +from backend.data.providers.tushare_indices import IndexMixin +from backend.data.providers.tushare_industries import ( + ShenwanIndustryMixin, + _filter_members_by_listing, + _match_sector_row, + _membership_active_on, + _reconcile_membership_rows, + _sector_coverage_issue, + _sector_match_priority, +) +from backend.data.providers.tushare_sectors import SectorMixin +from backend.data.providers.tushare_stocks import StockMixin +from backend.data.providers.tushare_transport import ( + TUSHARE_URL, + TushareError, + TushareTransportMixin, +) @dataclass -class TushareClient: +class TushareClient( + DashboardMixin, + IndexMixin, + ShenwanIndustryMixin, + SectorMixin, + DragonTigerMixin, + StockMixin, + DailyMarketMixin, + TushareTransportMixin, +): token: str timeout: int = 30 _realtime_reference_cache: ClassVar[dict[str, dict[str, Any]]] = {} @@ -36,2130 +66,3 @@ class TushareClient: _stock_listing_lock: ClassVar[Lock] = Lock() _suspension_cache: ClassVar[dict[str, dict[str, str] | None]] = {} _suspension_lock: ClassVar[Lock] = Lock() - - def query( - self, - api_name: str, - params: dict[str, Any] | None = None, - fields: str = "", - ) -> list[dict[str, Any]]: - payload = json.dumps( - { - "api_name": api_name, - "token": self.token, - "params": params or {}, - "fields": fields, - } - ).encode("utf-8") - request = urllib.request.Request( - TUSHARE_URL, - data=payload, - headers={"Content-Type": "application/json", "User-Agent": "XiaobaiReviewWeb/0.2"}, - method="POST", - ) - try: - with urllib.request.urlopen(request, timeout=self.timeout) as response: - result = json.loads(response.read().decode("utf-8")) - except (urllib.error.URLError, TimeoutError, json.JSONDecodeError) as exc: - raise TushareError(f"Tushare request failed: {exc}") from exc - - if result.get("code") != 0: - raise TushareError(result.get("msg") or "Tushare returned an unknown error") - - data = result.get("data") or {} - columns = data.get("fields") or [] - return [dict(zip(columns, item)) for item in data.get("items") or []] - - def dashboard(self, requested_date: str) -> dict[str, Any]: - trade_date, previous_trade_date = self.resolve_trade_context(requested_date) - if self.should_use_realtime(requested_date, trade_date): - return self._realtime_dashboard( - requested_date, - trade_date, - previous_trade_date, - ) - - daily = self._load_daily(trade_date) - if ( - not daily - and requested_date == datetime.now().astimezone().strftime("%Y%m%d") - and trade_date == requested_date - and datetime.now().astimezone().time().replace(tzinfo=None) >= dt_time(9, 15) - ): - return self._realtime_dashboard( - requested_date, - trade_date, - previous_trade_date, - ) - if not daily: - raise TushareError(f"No daily data returned for {trade_date}") - - notices: list[str] = [] - try: - limit_rows = self._load_limit_lists(trade_date) - previous_limit_rows = self._load_limit_type(previous_trade_date, "U") - if not limit_rows: - notices.append("涨跌停高级接口当日数据尚未更新,已使用日线数据推算。") - limit_rows = self._derive_limits(trade_date, daily) - except TushareError as exc: - notices.append(f"涨跌停高级接口不可用,已使用日线数据推算:{exc}") - limit_rows = self._derive_limits(trade_date, daily) - previous_daily = self._load_daily(previous_trade_date) - previous_limit_rows = [ - row for row in self._derive_limits(previous_trade_date, previous_daily) - if row.get("limit_type") == "U" - ] - - up_rows = [row for row in limit_rows if row.get("limit_type") == "U"] - down_rows = [row for row in limit_rows if row.get("limit_type") == "D"] - broken_rows = [row for row in limit_rows if row.get("limit_type") == "Z"] - limits = [self._normalize_limit(row, "涨停") for row in up_rows] - broken = [self._normalize_limit(row, "炸板") for row in broken_rows] - down_limits = [self._normalize_limit(row, "跌停") for row in down_rows] - previous_limits = [self._normalize_limit(row, "涨停") for row in previous_limit_rows] - yesterday_limits = _build_yesterday_performance( - previous_limits, - daily, - limits, - broken, - down_limits, - ) - sectors = _build_sectors(limits) - previous_sectors = _build_sectors(previous_limits) - - dashboard = { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(trade_date), - "previous_trade_date": _display_date(previous_trade_date), - "source": "tushare", - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - "notice": ";".join(notices), - }, - "overview": _build_overview(daily, up_rows, down_rows, broken_rows), - "limits": limits, - "broken": broken, - "down_limits": down_limits, - "yesterday_limits": yesterday_limits, - "limit_performance": _build_limit_performance(yesterday_limits), - "ladders": _build_ladders(limits), - "sectors": sectors, - "sector_rotation": _build_sector_rotation(sectors, previous_sectors), - } - return apply_sentiment_to_dashboard(dashboard) - - @staticmethod - def should_use_realtime(requested_date: str, trade_date: str) -> bool: - """Use rt_k for today's open market until end-of-day datasets settle.""" - now = datetime.now().astimezone() - today = now.strftime("%Y%m%d") - return ( - requested_date == today - and trade_date == today - and dt_time(9, 15) <= now.time().replace(tzinfo=None) < dt_time(16, 30) - ) - - def _realtime_dashboard( - self, - requested_date: str, - trade_date: str, - previous_trade_date: str, - ) -> dict[str, Any]: - reference = self._load_realtime_reference(trade_date, previous_trade_date) - basic_rows = list(reference["basic_rows"]) - codes = ",".join( - str(row.get("ts_code") or "") for row in basic_rows if row.get("ts_code") - ) - if not codes: - raise TushareError("No active stock codes available for rt_k") - quotes = self.query("rt_k", {"ts_code": codes}) - if not quotes: - raise TushareError(f"No realtime data returned for {trade_date}") - - basic_map = {str(row.get("ts_code") or ""): row for row in basic_rows} - daily: list[dict[str, Any]] = [] - for quote in quotes: - close = _number(quote.get("close")) - previous_close = _number(quote.get("pre_close")) - if close <= 0 or previous_close <= 0: - continue - basic = basic_map.get(str(quote.get("ts_code") or ""), {}) - daily.append( - { - **quote, - "trade_date": trade_date, - "name": str(quote.get("name") or basic.get("name") or "--").strip(), - "industry": basic.get("industry") or "其他", - "pct_chg": round((close / previous_close - 1) * 100, 4), - "amount_unit": "yuan", - } - ) - with self._realtime_reference_lock: - self._latest_realtime_market[trade_date] = { - "rows": daily, - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - } - if len(self._latest_realtime_market) > 3: - oldest = next(iter(self._latest_realtime_market)) - self._latest_realtime_market.pop(oldest, None) - - limit_rows = self._derive_limits( - trade_date, - daily, - price_limits=list(reference["price_limits"]), - basic_rows=basic_rows, - previous_limit_rows=list(reference["previous_limit_rows"]), - capital_rows=list(reference["capital_rows"]), - ) - previous_limit_rows = list(reference["previous_limit_rows"]) - up_rows = [row for row in limit_rows if row.get("limit_type") == "U"] - down_rows = [row for row in limit_rows if row.get("limit_type") == "D"] - broken_rows = [row for row in limit_rows if row.get("limit_type") == "Z"] - limits = [self._normalize_limit(row, "涨停") for row in up_rows] - broken = [self._normalize_limit(row, "炸板") for row in broken_rows] - down_limits = [self._normalize_limit(row, "跌停") for row in down_rows] - previous_limits = [self._normalize_limit(row, "涨停") for row in previous_limit_rows] - yesterday_limits = _build_yesterday_performance( - previous_limits, - daily, - limits, - broken, - down_limits, - ) - sectors = _build_sectors(limits) - previous_sectors = _build_sectors(previous_limits) - now = datetime.now().astimezone() - market_status = _realtime_market_status(now.time().replace(tzinfo=None)) - dashboard = { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(trade_date), - "previous_trade_date": _display_date(previous_trade_date), - "source": "tushare", - "mode": "realtime", - "realtime": True, - "market_status": market_status, - "refresh_mode": "manual", - "auto_refresh": False, - "quote_count": len(daily), - "updated_at": now.isoformat(timespec="seconds"), - "notice": "盘中行情由 Tushare rt_k 实时计算;涨停原因、封板时间和开板次数以盘后榜单校正为准。", - }, - "overview": _build_overview(daily, up_rows, down_rows, broken_rows), - "limits": limits, - "broken": broken, - "down_limits": down_limits, - "yesterday_limits": yesterday_limits, - "limit_performance": _build_limit_performance(yesterday_limits), - "ladders": _build_ladders(limits), - "sectors": sectors, - "sector_rotation": _build_sector_rotation(sectors, previous_sectors), - } - return apply_sentiment_to_dashboard(dashboard) - - def _load_realtime_reference( - self, - trade_date: str, - previous_trade_date: str, - ) -> dict[str, Any]: - cache_key = f"{trade_date}:{previous_trade_date}" - with self._realtime_reference_lock: - cached = self._realtime_reference_cache.get(cache_key) - if cached: - return cached - - basic_rows = self.query( - "stock_basic", - {"exchange": "", "list_status": "L"}, - "ts_code,name,industry,market,list_date", - ) - price_limits = self.query( - "stk_limit", - {"trade_date": trade_date}, - "ts_code,trade_date,up_limit,down_limit", - ) - previous_limit_rows = self._load_limit_type(previous_trade_date, "U") - capital_rows = self.query( - "daily_basic", - {"trade_date": previous_trade_date}, - "ts_code,trade_date,total_share,float_share,free_share,total_mv,circ_mv", - ) - if not basic_rows or not price_limits: - raise TushareError(f"Realtime reference data is incomplete for {trade_date}") - result = { - "basic_rows": basic_rows, - "price_limits": price_limits, - "previous_limit_rows": previous_limit_rows, - "capital_rows": capital_rows, - } - with self._realtime_reference_lock: - self._realtime_reference_cache[cache_key] = result - if len(self._realtime_reference_cache) > 3: - oldest = next(iter(self._realtime_reference_cache)) - self._realtime_reference_cache.pop(oldest, None) - return result - - def realtime_stock_quote( - self, - ts_code: str, - reference_date: str = "", - ) -> dict[str, Any]: - rows = self.query("rt_k", {"ts_code": ts_code}) - if not rows: - raise TushareError(f"No realtime quote returned for {ts_code}") - row = rows[0] - close = _number(row.get("close")) - previous_close = _number(row.get("pre_close")) - if close <= 0 or previous_close <= 0: - raise TushareError(f"Realtime quote is unavailable for {ts_code}") - - basic: dict[str, Any] = {} - with self._realtime_reference_lock: - references = list(self._realtime_reference_cache.values()) - for reference in reversed(references): - basic = next( - ( - item for item in reference.get("basic_rows") or [] - if str(item.get("ts_code") or "") == ts_code - ), - {}, - ) - if basic: - break - if not basic: - basics = self.query( - "stock_basic", - {"ts_code": ts_code}, - "ts_code,name,industry,market,list_date", - ) - basic = basics[0] if basics else {} - capital = self._latest_capital(ts_code, reference_date) - float_share = _number(capital.get("float_share")) - # rt_k volume is shares; daily_basic float_share is reported in 10k shares. - turnover_rate = _number(row.get("vol")) / float_share / 100 if float_share else 0 - market_date = reference_date or datetime.now().astimezone().strftime("%Y%m%d") - self._ensure_realtime_market_cache(market_date) - with self._realtime_reference_lock: - market_rows = list((self._latest_realtime_market.get(market_date) or {}).get("rows") or []) - references = list(self._realtime_reference_cache.values()) - capital_map: dict[str, dict[str, Any]] = {} - for reference in reversed(references): - capital_map = { - str(item.get("ts_code") or ""): item - for item in reference.get("capital_rows") or [] - } - if capital_map: - break - market_amounts = [_number(item.get("amount")) for item in market_rows if _number(item.get("amount")) > 0] - amount_percentile = _value_percentile(_number(row.get("amount")), market_amounts) - market_turnovers = [] - for item in market_rows: - item_capital = capital_map.get(str(item.get("ts_code") or ""), {}) - item_float_share = _number(item_capital.get("float_share")) - if item_float_share: - market_turnovers.append(_number(item.get("vol")) / item_float_share / 100) - market_turnover = ( - sum(market_turnovers) / len(market_turnovers) if market_turnovers else 0 - ) - turnover_relative = turnover_rate / market_turnover if market_turnover else 0 - activity = self._stock_activity_metrics( - ts_code, - market_date, - _number(row.get("vol")) / 100, - ) - return { - "code": ts_code.split(".")[0], - "ts_code": ts_code, - "name": str(row.get("name") or basic.get("name") or "--").strip(), - "sector": basic.get("industry") or "其他", - "price": round(close, 3), - "change": round((close / previous_close - 1) * 100, 4), - "open": round(_number(row.get("open")), 3), - "high": round(_number(row.get("high")), 3), - "low": round(_number(row.get("low")), 3), - "previous_close": round(previous_close, 3), - "amount_billion": round(_number(row.get("amount")) / 100000000, 3), - "volume": _number(row.get("vol")), - "trade_count": int(_number(row.get("num"))), - "turnover_rate": round(turnover_rate, 4), - "market_turnover_rate": round(market_turnover, 4), - "turnover_relative": round(turnover_relative, 4), - "amount_percentile": round(amount_percentile * 100, 2), - "volume_activity_ratio": activity.get("volume_activity_ratio", 0), - "activity_history_date": activity.get("history_trade_date", ""), - "activity_source": activity.get("source", "unavailable"), - "float_share_10k": float_share, - "capital_trade_date": str(capital.get("trade_date") or ""), - "turnover_source": "rt_volume/latest_float_share" if float_share else "unavailable", - "data_source": "tushare", - "realtime": True, - } - - def _stock_activity_metrics( - self, - ts_code: str, - reference_date: str, - current_volume_lots: float, - ) -> dict[str, Any]: - cache_key = f"{ts_code}:{reference_date}" - with self._realtime_reference_lock: - history = self._stock_activity_cache.get(cache_key) - if history is None: - try: - end = datetime.strptime(reference_date, "%Y%m%d") - except ValueError: - end = datetime.now().astimezone().replace(tzinfo=None) - rows = self.query( - "daily", - { - "ts_code": ts_code, - "start_date": (end - timedelta(days=30)).strftime("%Y%m%d"), - "end_date": reference_date, - }, - "ts_code,trade_date,vol,amount", - ) - completed = [ - item for item in rows - if str(item.get("trade_date") or "") < reference_date and _number(item.get("vol")) > 0 - ] - completed.sort(key=lambda item: str(item.get("trade_date") or "")) - recent = completed[-5:] - history = { - "average_volume_lots": ( - sum(_number(item.get("vol")) for item in recent) / len(recent) - if recent else 0 - ), - "history_trade_date": str(recent[-1].get("trade_date") or "") if recent else "", - } - with self._realtime_reference_lock: - self._stock_activity_cache[cache_key] = history - if len(self._stock_activity_cache) > 256: - oldest = next(iter(self._stock_activity_cache)) - self._stock_activity_cache.pop(oldest, None) - average_volume = _number(history.get("average_volume_lots")) - progress = _trading_session_progress(datetime.now().astimezone().time().replace(tzinfo=None)) - expected_volume = average_volume * progress - ratio = current_volume_lots / expected_volume if expected_volume else 0 - return { - **history, - "volume_activity_ratio": round(ratio, 4), - "session_progress": round(progress, 4), - "source": "rt_volume/5d_average_at_same_progress" if expected_volume else "unavailable", - } - - def realtime_factor_snapshot(self, requested_date: str) -> dict[str, Any]: - trade_date, previous_trade_date = self.resolve_trade_context(requested_date) - reference = self._load_realtime_reference(trade_date, previous_trade_date) - codes = [ - str(row.get("ts_code") or "") - for row in reference.get("basic_rows") or [] - if row.get("ts_code") - ] - quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") - capital_map = { - str(row.get("ts_code") or ""): row - for row in reference.get("capital_rows") or [] - } - rows = [] - for quote in quotes: - ts_code = str(quote.get("ts_code") or "") - close = _number(quote.get("close")) - previous_close = _number(quote.get("pre_close")) - if not ts_code or close <= 0 or previous_close <= 0: - continue - capital = capital_map.get(ts_code, {}) - float_share = _number(capital.get("float_share")) - rows.append( - { - "ts_code": ts_code, - "trade_date": trade_date, - "open": _number(quote.get("open")), - "high": _number(quote.get("high")), - "low": _number(quote.get("low")), - "close": close, - "pct_chg": (close / previous_close - 1) * 100, - "vol": _number(quote.get("vol")) / 100, - "amount": _number(quote.get("amount")), - "turnover_rate": ( - _number(quote.get("vol")) / float_share / 100 if float_share else 0 - ), - "capital_trade_date": str(capital.get("trade_date") or ""), - } - ) - if not rows: - raise TushareError(f"No realtime factor snapshot returned for {trade_date}") - return { - "trade_date": trade_date, - "previous_trade_date": previous_trade_date, - "source": "tushare_rt_k", - "realtime": True, - "rows": rows, - } - - def _ensure_realtime_market_cache(self, requested_date: str) -> list[dict[str, Any]]: - with self._realtime_reference_lock: - cached = list( - (self._latest_realtime_market.get(requested_date) or {}).get("rows") or [] - ) - if cached: - return cached - trade_date, previous_trade_date = self.resolve_trade_context(requested_date) - if trade_date != requested_date: - return [] - reference = self._load_realtime_reference(trade_date, previous_trade_date) - codes = [ - str(row.get("ts_code") or "") - for row in reference.get("basic_rows") or [] - if row.get("ts_code") - ] - quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") - rows = [ - row for row in quotes - if _number(row.get("close")) > 0 and _number(row.get("pre_close")) > 0 - ] - with self._realtime_reference_lock: - self._latest_realtime_market[trade_date] = { - "rows": rows, - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - } - return rows - - def _latest_capital(self, ts_code: str, reference_date: str = "") -> dict[str, Any]: - end_date = reference_date or datetime.now().astimezone().strftime("%Y%m%d") - cache_key = f"{ts_code}:{end_date}" - with self._realtime_reference_lock: - cached = self._capital_cache.get(cache_key) - if cached: - return cached - try: - end = datetime.strptime(end_date, "%Y%m%d") - except ValueError: - end = datetime.now().astimezone().replace(tzinfo=None) - end_date = end.strftime("%Y%m%d") - start_date = (end - timedelta(days=20)).strftime("%Y%m%d") - rows = self.query( - "daily_basic", - {"ts_code": ts_code, "start_date": start_date, "end_date": end_date}, - "ts_code,trade_date,turnover_rate,volume_ratio,total_share,float_share," - "free_share,total_mv,circ_mv", - ) - rows.sort(key=lambda item: str(item.get("trade_date") or "")) - result = rows[-1] if rows else {} - with self._realtime_reference_lock: - self._capital_cache[cache_key] = result - if len(self._capital_cache) > 256: - oldest = next(iter(self._capital_cache)) - self._capital_cache.pop(oldest, None) - return result - - def market_indices(self, requested_date: str, lookback_days: int = 45) -> dict[str, Any]: - trade_date, _ = self.resolve_trade_context(requested_date) - end = datetime.strptime(trade_date, "%Y%m%d") - start_date = (end - timedelta(days=max(30, lookback_days * 2))).strftime("%Y%m%d") - index_names = { - "000001.SH": "上证指数", - "399001.SZ": "深证成指", - "399006.SZ": "创业板指", - } - indices = [] - for ts_code, name in index_names.items(): - rows = self.query( - "index_daily", - {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, - "ts_code,trade_date,close,pct_chg,vol,amount", - ) - rows.sort(key=lambda item: str(item.get("trade_date") or "")) - if not rows: - continue - latest = rows[-1] - close = _number(latest.get("close")) - close_5d = _number(rows[-6].get("close")) if len(rows) >= 6 else _number(rows[0].get("close")) - close_20d = _number(rows[-21].get("close")) if len(rows) >= 21 else _number(rows[0].get("close")) - indices.append( - { - "ts_code": ts_code, - "name": name, - "trade_date": str(latest.get("trade_date") or trade_date), - "close": close, - "pct_chg": round(_number(latest.get("pct_chg")), 3), - "return_5d": round((close / close_5d - 1) * 100, 3) if close_5d else 0, - "return_20d": round((close / close_20d - 1) * 100, 3) if close_20d else 0, - "amount_billion": round(_number(latest.get("amount")) / 100000, 2), - } - ) - if not indices: - raise TushareError(f"No index data returned for {trade_date}") - return { - "trade_date": trade_date, - "source": "tushare", - "realtime": False, - "precise": all(item["trade_date"] == trade_date for item in indices), - "indices": indices, - "aggregate": { - "average_pct_chg": round(sum(item["pct_chg"] for item in indices) / len(indices), 3), - "average_return_5d": round(sum(item["return_5d"] for item in indices) / len(indices), 3), - "average_return_20d": round(sum(item["return_20d"] for item in indices) / len(indices), 3), - }, - } - - def realtime_market_indices(self, requested_date: str) -> dict[str, Any]: - trade_date, _ = self.resolve_trade_context(requested_date) - index_names = { - "000001.SH": "上证指数", - "399001.SZ": "深证成指", - "399006.SZ": "创业板指", - } - rows = self.query("rt_idx_k", {"ts_code": ",".join(index_names)}, "") - row_map = {str(row.get("ts_code") or ""): row for row in rows} - indices = [] - for ts_code, name in index_names.items(): - row = row_map.get(ts_code) - if not row: - continue - close = _number(row.get("close")) - previous_close = _number(row.get("pre_close")) - if close <= 0 or previous_close <= 0: - continue - history = self.query( - "index_daily", - { - "ts_code": ts_code, - "start_date": (datetime.strptime(trade_date, "%Y%m%d") - timedelta(days=20)).strftime("%Y%m%d"), - "end_date": trade_date, - }, - "ts_code,trade_date,close,pct_chg", - ) - history.sort(key=lambda item: str(item.get("trade_date") or "")) - previous_closes = [ - _number(item.get("close")) for item in history - if str(item.get("trade_date") or "") < trade_date and _number(item.get("close")) > 0 - ] - close_5d = previous_closes[-5] if len(previous_closes) >= 5 else previous_closes[0] if previous_closes else previous_close - indices.append( - { - "ts_code": ts_code, - "name": str(row.get("name") or name).strip(), - "trade_date": trade_date, - "close": close, - "pct_chg": round((close / previous_close - 1) * 100, 3), - "return_5d": round((close / close_5d - 1) * 100, 3) if close_5d else 0, - "amount_billion": round(_number(row.get("amount")) / 100000000, 2), - } - ) - if len(indices) != len(index_names): - raise TushareError("Realtime index quotes are incomplete") - return { - "trade_date": trade_date, - "source": "tushare_rt_idx_k", - "realtime": True, - "precise": True, - "indices": indices, - "aggregate": { - "average_pct_chg": round(sum(item["pct_chg"] for item in indices) / len(indices), 3), - "average_return_5d": round(sum(item["return_5d"] for item in indices) / len(indices), 3), - "average_return_20d": 0, - }, - } - - def sw_stock_industry(self, ts_code: str, trade_date: str) -> dict[str, Any]: - """Return the Shenwan industry active for a stock on trade_date.""" - rows = [] - for is_new in ("Y", "N"): - rows.extend( - self.query( - "index_member_all", - {"ts_code": ts_code, "is_new": is_new}, - "l1_code,l1_name,l2_code,l2_name,l3_code,l3_name," - "ts_code,name,in_date,out_date,is_new", - ) - ) - rows = _reconcile_membership_rows(rows) - matched = [row for row in rows if _membership_active_on(row, trade_date)] - if not matched: - matched = [ - row for row in rows - if row.get("is_new") == "Y" - and str(row.get("in_date") or "") <= trade_date - ] - if not matched: - raise TushareError(f"No Shenwan industry returned for {ts_code}") - row = max( - matched, - key=lambda item: ( - str(item.get("in_date") or ""), - 1 if item.get("is_new") == "Y" else 0, - str(item.get("l3_code") or item.get("l2_code") or ""), - ), - ) - return { - "l1_code": str(row.get("l1_code") or ""), - "l1_name": str(row.get("l1_name") or ""), - "l2_code": str(row.get("l2_code") or ""), - "l2_name": str(row.get("l2_name") or ""), - "l3_code": str(row.get("l3_code") or ""), - "l3_name": str(row.get("l3_name") or ""), - "in_date": str(row.get("in_date") or ""), - "out_date": str(row.get("out_date") or ""), - "is_new": str(row.get("is_new") or ""), - } - - def sw_sector_snapshot( - self, - ts_code: str, - requested_date: str, - realtime_expected: bool = False, - allow_realtime_close: bool = False, - ) -> dict[str, Any]: - """Build the single Shenwan L2 sector context used by heaven trend.""" - trade_date, previous_trade_date = self.resolve_trade_context(requested_date) - industry = self.sw_stock_industry(ts_code, trade_date) - sector_code = str(industry.get("l2_code") or "") - if not sector_code: - raise TushareError(f"Shenwan L2 code is unavailable for {ts_code}") - members = self._sw_sector_members(sector_code, trade_date) - if not members: - raise TushareError(f"No Shenwan members returned for {sector_code}") - raw_member_count = len(members) - members, excluded_members = _filter_members_by_listing( - members, - self._stock_listing_reference(), - trade_date, - ) - if not members: - raise TushareError(f"No listed Shenwan members returned for {sector_code}") - - if realtime_expected: - snapshot = self._sw_realtime_sector_snapshot( - industry, - members, - trade_date, - previous_trade_date, - finalized=False, - ) - snapshot.update({ - "raw_member_count": raw_member_count, - "excluded_member_count": len(excluded_members), - "excluded_members": excluded_members, - }) - return snapshot - - member_set = {str(item.get("ts_code") or "") for item in members} - member_names = { - str(item.get("ts_code") or ""): str(item.get("name") or "") - for item in members - } - member_rows = [ - row for row in self._load_daily(trade_date) - if str(row.get("ts_code") or "") in member_set - ] - quoted_codes = {str(row.get("ts_code") or "") for row in member_rows} - suspended_members = self._confirmed_suspended_members( - members, quoted_codes, trade_date - ) - up_count = sum(_number(row.get("pct_chg")) > 0 for row in member_rows) - down_count = sum(_number(row.get("pct_chg")) < 0 for row in member_rows) - leader = max(member_rows, key=lambda row: _number(row.get("pct_chg")), default={}) - leader_code = str(leader.get("ts_code") or "") - equal_change = ( - sum(_number(row.get("pct_chg")) for row in member_rows) / len(member_rows) - if member_rows else 0 - ) - coverage = len(member_rows) / max(len(members), 1) * 100 - explained_count = len(member_rows) + len(suspended_members) - explained_coverage = explained_count / max(len(members), 1) * 100 - coverage_issue = _sector_coverage_issue( - len(members), - len(member_rows), - explained_coverage, - explained_count, - ) - inner_precise = not coverage_issue - inner_error = coverage_issue - amount_billion = sum(_number(row.get("amount")) for row in member_rows) / 100000 - rows = self.query( - "sw_daily", - {"ts_code": sector_code, "trade_date": trade_date}, - "ts_code,trade_date,name,close,pct_change,vol,amount,pe,pb,float_mv,total_mv", - ) - daily = rows[0] if rows else {} - actual_trade_date = str(daily.get("trade_date") or "") - outer_precise = actual_trade_date == trade_date - outer_error = "" if outer_precise else ( - f"No Shenwan daily returned for {sector_code} on {trade_date}" - ) - if not outer_precise and allow_realtime_close: - try: - return self._sw_realtime_sector_snapshot( - industry, - members, - trade_date, - previous_trade_date, - finalized=True, - ) - except TushareError as exc: - outer_error = f"{outer_error}; realtime close fallback failed: {exc}" - - official_change = _number(daily.get("pct_change")) if outer_precise else None - return { - "code": sector_code, - "name": industry.get("l2_name") or daily.get("name") or sector_code, - "leader": str(leader.get("name") or member_names.get(leader_code) or "--"), - "leader_code": leader_code, - "leading_pct": round(_number(leader.get("pct_chg")), 3), - "change": round(official_change, 3) if official_change is not None else None, - "member_equal_change": round(equal_change, 3), - "turnover_rate": 0, - "up_count": up_count, - "down_count": down_count, - "flat_count": len(member_rows) - up_count - down_count, - "member_count": len(members), - "raw_member_count": raw_member_count, - "excluded_member_count": len(excluded_members), - "excluded_members": excluded_members, - "quote_count": len(member_rows), - "coverage": round(coverage, 1), - "explained_count": explained_count, - "explained_coverage": round(explained_coverage, 1), - "suspended_count": len(suspended_members), - "suspended_members": suspended_members, - "strength": round(max(0, min(100, 50 + (official_change if official_change is not None else equal_change) * 5)), 1), - "amount_billion": round(amount_billion, 2), - "count": 0, - "max_streak": 0, - "source": "tushare_sw_daily+member_daily" if outer_precise else "tushare_member_daily", - "inner_source": "tushare_member_daily", - "outer_source": "tushare_sw_daily" if outer_precise else "unavailable", - "taxonomy": "sw_l2", - "industry": industry, - "trade_date": trade_date, - "inner_trade_date": trade_date if member_rows else "", - "outer_trade_date": actual_trade_date, - "realtime": False, - "finalized": True, - "inner_precise": inner_precise, - "outer_precise": outer_precise, - "precise": inner_precise and outer_precise, - "inner_error": inner_error, - "outer_error": outer_error, - "schema_version": 6, - "methodology": "外显使用申万二级行业官方日线;内核独立使用当日成分日线宽度与等权涨跌聚合", - } - - def _sw_sector_members( - self, - sector_code: str, - trade_date: str, - ) -> list[dict[str, Any]]: - rows = [] - for is_new in ("Y", "N"): - rows.extend( - self.query( - "index_member_all", - {"l2_code": sector_code, "is_new": is_new}, - "l2_code,l2_name,ts_code,name,in_date,out_date,is_new", - ) - ) - deduped: dict[str, dict[str, Any]] = {} - for row in _reconcile_membership_rows(rows): - code = str(row.get("ts_code") or "") - if code and _membership_active_on(row, trade_date): - current = deduped.get(code) - if current is None or str(row.get("in_date") or "") > str(current.get("in_date") or ""): - deduped[code] = row - return list(deduped.values()) - - def sw_sector_members(self, sector_code: str, trade_date: str) -> list[dict[str, Any]]: - """Return constituents active in a Shenwan L2 industry on the target date.""" - return self._sw_sector_members(sector_code, trade_date) - - def _stock_listing_reference(self) -> dict[str, dict[str, Any]]: - now = datetime.now().astimezone() - with self._stock_listing_lock: - loaded_at = self._stock_listing_cache.get("loaded_at") - cached = self._stock_listing_cache.get("rows") - if ( - isinstance(loaded_at, datetime) - and isinstance(cached, dict) - and now - loaded_at < timedelta(hours=6) - ): - return cached - - rows: list[dict[str, Any]] = [] - try: - for status in ("L", "D", "P"): - rows.extend(self.query( - "stock_basic", - {"list_status": status}, - "ts_code,name,list_status,list_date,delist_date", - )) - except TushareError: - # Unknown status must remain in the denominator so a reference-data - # failure cannot silently improve coverage. - return {} - reference = { - str(row.get("ts_code") or ""): dict(row) - for row in rows - if row.get("ts_code") - } - with self._stock_listing_lock: - type(self)._stock_listing_cache = {"loaded_at": now, "rows": reference} - return reference - - def _confirmed_suspended_members( - self, - members: list[dict[str, Any]], - quoted_codes: set[str], - trade_date: str, - ) -> list[dict[str, str]]: - suspended: list[dict[str, str]] = [] - for member in members: - code = str(member.get("ts_code") or "") - if not code or code in quoted_codes: - continue - cache_key = f"{trade_date}:{code}" - with self._suspension_lock: - cached = self._suspension_cache.get(cache_key, "missing") - if cached == "missing": - try: - rows = self.query( - "suspend_d", - {"ts_code": code}, - "ts_code,suspend_date,resume_date,ann_date,suspend_reason,reason_type", - ) - except TushareError: - rows = [] - active = [ - row for row in rows - if str(row.get("suspend_date") or "") - and str(row.get("suspend_date") or "") <= trade_date - and ( - not str(row.get("resume_date") or "") - or trade_date < str(row.get("resume_date") or "") - ) - ] - row = max( - active, - key=lambda item: str(item.get("suspend_date") or ""), - default=None, - ) - cached = ({ - "ts_code": code, - "name": str(member.get("name") or code), - "suspend_date": str(row.get("suspend_date") or ""), - "resume_date": str(row.get("resume_date") or ""), - "reason": str(row.get("suspend_reason") or row.get("reason_type") or "已确认停牌"), - } if row else None) - with self._suspension_lock: - type(self)._suspension_cache[cache_key] = cached - if isinstance(cached, dict): - suspended.append(cached) - return suspended - - def _sw_realtime_sector_snapshot( - self, - industry: dict[str, Any], - members: list[dict[str, Any]], - trade_date: str, - previous_trade_date: str, - finalized: bool = False, - ) -> dict[str, Any]: - sector_code = str(industry.get("l2_code") or "") - sw_rows = self.query( - "rt_sw_k", - {"ts_code": sector_code}, - "ts_code,name,trade_time,close,pre_close,high,open,low,vol,amount,pct_change", - ) - sw_row = sw_rows[0] if sw_rows else {} - trade_time = str(sw_row.get("trade_time") or "") - quote_date = trade_time[:10].replace("-", "") - quote_clock = trade_time[11:19] if len(trade_time) >= 19 else "" - outer_precise = bool(sw_row and quote_date == trade_date) - if finalized and (not quote_clock or quote_clock < "15:00:00"): - outer_precise = False - official_change = _number(sw_row.get("pct_change")) - if not official_change: - close = _number(sw_row.get("close")) - pre_close = _number(sw_row.get("pre_close")) - official_change = (close / pre_close - 1) * 100 if close and pre_close else 0 - if not outer_precise: - official_change = None - outer_error = "" - if not sw_row: - outer_error = f"No Shenwan realtime index returned for {sector_code}" - elif quote_date != trade_date: - outer_error = f"Shenwan realtime index date is {quote_date or 'unknown'}, expected {trade_date}" - elif finalized and (not quote_clock or quote_clock < "15:00:00"): - outer_error = f"Shenwan realtime index is not a close snapshot ({trade_time})" - - valid: list[dict[str, Any]] = [] - codes: list[str] = [] - reference: dict[str, Any] = {} - inner_error = "" - try: - reference = self._load_realtime_reference(trade_date, previous_trade_date) - active_codes = { - str(row.get("ts_code") or "") - for row in reference.get("basic_rows") or [] - if row.get("ts_code") - } - codes = [ - str(row.get("ts_code") or "") - for row in members - if str(row.get("ts_code") or "") in active_codes - ] - if codes: - quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") - for row in quotes: - close = _number(row.get("close")) - previous_close = _number(row.get("pre_close")) - if close <= 0 or previous_close <= 0: - continue - valid.append({**row, "change": (close / previous_close - 1) * 100}) - else: - inner_error = f"No active Shenwan members returned for {sector_code}" - except TushareError as exc: - inner_error = str(exc) - - coverage = len(valid) / max(len(codes), 1) * 100 - valid_codes = {str(item.get("ts_code") or "") for item in valid} - suspended_members = self._confirmed_suspended_members( - members, valid_codes, trade_date - ) - explained_count = len(valid) + len(suspended_members) - explained_coverage = explained_count / max(len(codes), 1) * 100 - coverage_issue = _sector_coverage_issue( - len(codes), len(valid), explained_coverage, explained_count - ) - inner_precise = bool(codes) and not coverage_issue - if not inner_precise and not inner_error: - inner_error = coverage_issue or "申万实时有效成分为空" - up_count = sum(item["change"] > 0 for item in valid) - down_count = sum(item["change"] < 0 for item in valid) - leader = max(valid, key=lambda item: item["change"], default={}) - leader_code = str(leader.get("ts_code") or "") - member_names = { - str(item.get("ts_code") or ""): str(item.get("name") or "") - for item in members - } - equal_change = sum(item["change"] for item in valid) / len(valid) if valid else 0 - amount_billion = sum(_number(item.get("amount")) for item in valid) / 100000000 - try: - self._ensure_realtime_market_cache(trade_date) - with self._realtime_reference_lock: - market_rows = list( - (self._latest_realtime_market.get(trade_date) or {}).get("rows") or [] - ) - except TushareError as exc: - market_rows = [] - inner_precise = False - inner_error = inner_error or str(exc) - capital_map = { - str(item.get("ts_code") or ""): item - for item in reference.get("capital_rows") or [] - } - sector_turnovers = [] - for item in valid: - capital = capital_map.get(str(item.get("ts_code") or ""), {}) - float_share = _number(capital.get("float_share")) - if float_share: - sector_turnovers.append(_number(item.get("vol")) / float_share / 100) - market_turnovers = [] - for item in market_rows: - capital = capital_map.get(str(item.get("ts_code") or ""), {}) - float_share = _number(capital.get("float_share")) - if float_share: - market_turnovers.append(_number(item.get("vol")) / float_share / 100) - average_turnover = sum(sector_turnovers) / len(sector_turnovers) if sector_turnovers else 0 - market_turnover = sum(market_turnovers) / len(market_turnovers) if market_turnovers else 0 - relative_turnover = average_turnover / market_turnover if market_turnover else 0 - if not relative_turnover: - inner_precise = False - inner_error = inner_error or "Shenwan member relative turnover is unavailable" - return { - "code": sector_code, - "name": str(industry.get("l2_name") or sw_row.get("name") or ""), - "leader": str(leader.get("name") or member_names.get(leader_code) or "--").strip(), - "leader_code": leader_code, - "leading_pct": round(_number(leader.get("change")), 3), - "change": round(official_change, 3) if official_change is not None else None, - "member_equal_change": round(equal_change, 3), - "turnover_rate": round(average_turnover, 4), - "market_turnover_rate": round(market_turnover, 4), - "relative_turnover": round(relative_turnover, 4), - "up_count": up_count, - "down_count": down_count, - "flat_count": len(valid) - up_count - down_count, - "member_count": len(codes), - "quote_count": len(valid), - "coverage": round(coverage, 1), - "explained_count": explained_count, - "explained_coverage": round(explained_coverage, 1), - "suspended_count": len(suspended_members), - "suspended_members": suspended_members, - "strength": round(max(0, min(100, 50 + (official_change if official_change is not None else equal_change) * 5)), 1), - "amount_billion": round(amount_billion, 2), - "count": sum(item["change"] >= 9.5 for item in valid), - "max_streak": 0, - "source": "tushare_rt_sw_k+sw_members_rt_k", - "inner_source": "tushare_sw_members+rt_k", - "outer_source": "tushare_rt_sw_k", - "taxonomy": "sw_l2", - "industry": industry, - "trade_date": trade_date, - "inner_trade_date": trade_date if valid else "", - "outer_trade_date": quote_date, - "trade_time": trade_time, - "realtime": True, - "finalized": finalized, - "inner_precise": inner_precise, - "outer_precise": outer_precise, - "precise": inner_precise and outer_precise, - "inner_error": inner_error, - "outer_error": outer_error, - "schema_version": 6, - "methodology": "外显使用申万官方 rt_sw_k;内核独立使用申万成分 rt_k 宽度与相对换手聚合", - } - - def sector_snapshot( - self, - identifier: str, - requested_date: str, - realtime_expected: bool | None = None, - ) -> dict[str, Any]: - trade_date, _ = self.resolve_trade_context(requested_date) - raw_identifier = identifier.strip() - if not raw_identifier: - raise TushareError("Sector identifier is empty") - errors = [] - now = datetime.now().astimezone() - if realtime_expected is None: - realtime_expected = ( - trade_date == now.strftime("%Y%m%d") - and dt_time(9, 15) <= now.time().replace(tzinfo=None) <= dt_time(15, 5) - ) - try: - dc_params = {"trade_date": trade_date} - if re.fullmatch(r"[A-Z0-9.]+", raw_identifier.upper()) and "." in raw_identifier: - dc_params["ts_code"] = raw_identifier.upper() - else: - dc_params["name"] = raw_identifier - dc_rows = self.query( - "dc_index", - dc_params, - "ts_code,trade_date,name,leading,leading_code,pct_change,leading_pct," - "total_mv,turnover_rate,up_num,down_num", - ) - if not dc_rows and "name" in dc_params: - dc_rows = self.query( - "dc_index", - {"trade_date": trade_date}, - "ts_code,trade_date,name,leading,leading_code,pct_change,leading_pct," - "total_mv,turnover_rate,up_num,down_num", - ) - dc_row = _match_sector_row(dc_rows, raw_identifier) - if dc_row and not realtime_expected: - change = _number(dc_row.get("pct_change")) - actual_trade_date = str(dc_row.get("trade_date") or "") - return { - "code": dc_row.get("ts_code") or "", - "name": dc_row.get("name") or raw_identifier, - "leader": dc_row.get("leading") or "--", - "leader_code": dc_row.get("leading_code") or "", - "leading_pct": _number(dc_row.get("leading_pct")), - "change": change, - "turnover_rate": _number(dc_row.get("turnover_rate")), - "up_count": int(_number(dc_row.get("up_num"))), - "down_count": int(_number(dc_row.get("down_num"))), - "total_mv": _number(dc_row.get("total_mv")), - "strength": round(max(0, min(100, 50 + change * 5)), 1), - "amount_billion": 0, - "count": 0, - "max_streak": 0, - "source": "tushare_dc", - "trade_date": actual_trade_date, - "realtime": False, - "precise": actual_trade_date == trade_date, - } - except TushareError as exc: - errors.append(f"DC: {exc}") - - ts_code = raw_identifier.upper() - if re.fullmatch(r"\d{6}", ts_code): - ts_code = f"{ts_code}.TI" - try: - if re.fullmatch(r"\d{6}\.TI", ts_code): - index_rows = self.query( - "ths_index", - {"ts_code": ts_code}, - "ts_code,name,count,exchange,list_date,type", - ) - else: - index_rows = self.query( - "ths_index", - {}, - "ts_code,name,count,exchange,list_date,type", - ) - basic = _match_sector_row(index_rows, raw_identifier) - if not basic: - raise TushareError(f"No THS sector returned for {raw_identifier}") - except TushareError as exc: - errors.append(f"THS: {exc}") - raise TushareError("; ".join(errors)) from exc - actual_code = str(basic.get("ts_code") or ts_code) - if realtime_expected: - try: - realtime_sector = self._realtime_sector_snapshot(actual_code, basic, trade_date) - if realtime_sector: - return realtime_sector - except TushareError as exc: - errors.append(f"THS realtime members: {exc}") - daily_rows = self.query( - "ths_daily", - {"ts_code": actual_code, "trade_date": trade_date}, - "ts_code,trade_date,close,pct_change,vol,turnover_rate,total_mv,float_mv", - ) - daily = daily_rows[0] if daily_rows else {} - actual_trade_date = str(daily.get("trade_date") or "") - change = _number(daily.get("pct_change")) - return { - "code": actual_code, - "name": basic.get("name") or raw_identifier, - "leader": "--", - "change": change, - "leading_pct": change, - "turnover_rate": _number(daily.get("turnover_rate")), - "up_count": 0, - "down_count": 0, - "strength": round(max(0, min(100, 50 + change * 5)), 1), - "amount_billion": 0, - "count": 0, - "max_streak": 0, - "source": "tushare_ths", - "trade_date": actual_trade_date, - "realtime": False, - "precise": actual_trade_date == trade_date, - } - - def _realtime_sector_snapshot( - self, - sector_code: str, - basic: dict[str, Any], - trade_date: str, - ) -> dict[str, Any] | None: - members = self.query( - "ths_member", - {"ts_code": sector_code, "is_new": "Y"}, - "ts_code,con_code,con_name,is_new", - ) - codes = [str(row.get("con_code") or "") for row in members if row.get("con_code")] - if not codes: - return None - quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") - valid = [] - for row in quotes: - close = _number(row.get("close")) - previous_close = _number(row.get("pre_close")) - if close <= 0 or previous_close <= 0: - continue - valid.append( - { - **row, - "change": (close / previous_close - 1) * 100, - } - ) - minimum = max(1, math.ceil(len(codes) * 0.9)) - if len(valid) < minimum: - raise TushareError( - f"Realtime sector coverage is insufficient ({len(valid)}/{len(codes)})" - ) - up_count = sum(item["change"] > 0 for item in valid) - down_count = sum(item["change"] < 0 for item in valid) - flat_count = len(valid) - up_count - down_count - leader = max(valid, key=lambda item: item["change"]) - change = sum(item["change"] for item in valid) / len(valid) - amount_billion = sum(_number(item.get("amount")) for item in valid) / 100000000 - self._ensure_realtime_market_cache(trade_date) - with self._realtime_reference_lock: - references = list(self._realtime_reference_cache.values()) - market_rows = list((self._latest_realtime_market.get(trade_date) or {}).get("rows") or []) - capital_map: dict[str, dict[str, Any]] = {} - for reference in reversed(references): - capital_map = { - str(item.get("ts_code") or ""): item - for item in reference.get("capital_rows") or [] - } - if capital_map: - break - sector_turnovers = [] - for item in valid: - capital = capital_map.get(str(item.get("ts_code") or ""), {}) - float_share = _number(capital.get("float_share")) - if float_share: - sector_turnovers.append(_number(item.get("vol")) / float_share / 100) - market_turnovers = [] - for item in market_rows: - capital = capital_map.get(str(item.get("ts_code") or ""), {}) - float_share = _number(capital.get("float_share")) - if float_share: - market_turnovers.append(_number(item.get("vol")) / float_share / 100) - average_turnover = sum(sector_turnovers) / len(sector_turnovers) if sector_turnovers else 0 - market_turnover = sum(market_turnovers) / len(market_turnovers) if market_turnovers else 0 - relative_turnover = average_turnover / market_turnover if market_turnover else 0 - return { - "code": sector_code, - "name": basic.get("name") or sector_code, - "leader": str(leader.get("name") or "--").strip(), - "leader_code": leader.get("ts_code") or "", - "leading_pct": round(leader["change"], 3), - "change": round(change, 3), - "turnover_rate": round(average_turnover, 4), - "market_turnover_rate": round(market_turnover, 4), - "relative_turnover": round(relative_turnover, 4), - "up_count": up_count, - "down_count": down_count, - "flat_count": flat_count, - "member_count": len(codes), - "quote_count": len(valid), - "coverage": round(len(valid) / len(codes) * 100, 1), - "strength": round(max(0, min(100, 50 + change * 5)), 1), - "amount_billion": round(amount_billion, 2), - "count": sum(item["change"] >= 9.5 for item in valid), - "max_streak": 0, - "source": "tushare_rt_ths_members", - "trade_date": trade_date, - "realtime": True, - "precise": True, - "methodology": "同花顺行业最新成分股的 rt_k 等权涨跌、宽度与成交额聚合", - } - - def hot_money_profiles(self) -> dict[str, Any]: - rows = self.query("hm_list", {}, "name,desc,orgs") - profiles: list[dict[str, Any]] = [] - seen_names: set[str] = set() - for row in rows: - name = str(row.get("name") or "").strip() - if not name or name in seen_names: - continue - seen_names.add(name) - description = _text(row.get("desc")) - organization_text = _text(row.get("orgs")) - parsed_organizations: Any = None - if organization_text.startswith("["): - try: - parsed_organizations = json.loads(organization_text) - except json.JSONDecodeError: - parsed_organizations = None - organization_parts = ( - parsed_organizations - if isinstance(parsed_organizations, list) - else re.split(r"[,,;;\n]+", organization_text) - ) - organizations = list(dict.fromkeys( - _text(part) - for part in organization_parts - if _text(part) - )) - profiles.append( - { - "id": f"hot-money-profile-{len(profiles) + 1}", - "name": name, - "description": description, - "organizations": organizations, - "organization_count": len(organizations), - } - ) - return { - "meta": { - "source": "tushare", - "status": "success" if profiles else "empty", - "schema_version": 1, - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - "notice": "", - }, - "summary": { - "profile_count": len(profiles), - "described_count": sum(bool(item["description"]) for item in profiles), - "organization_count": sum(item["organization_count"] for item in profiles), - }, - "profiles": profiles, - } - - def dragon_tiger(self, requested_date: str) -> dict[str, Any]: - trade_date, _ = self.resolve_trade_context(requested_date) - detail_rows = self.query( - "hm_detail", - {"trade_date": trade_date}, - "trade_date,ts_code,ts_name,buy_amount,sell_amount,net_amount," - "hm_name,hm_orgs,tag", - ) - - notices: list[str] = [] - try: - directory_rows = self.query("hm_list", {}, "name,desc,orgs") - except TushareError as exc: - directory_rows = [] - notices.append(f"游资名录暂不可用:{exc}") - directory = { - str(row.get("name") or "").strip(): { - "description": _text(row.get("desc")), - "orgs": _text(row.get("orgs")), - } - for row in directory_rows - if str(row.get("name") or "").strip() - } - - # 个股龙虎榜仅用于补充涨幅和上榜原因,不参与游资身份识别。 - try: - top_rows = self.query( - "top_list", - {"trade_date": trade_date}, - "trade_date,ts_code,name,pct_change,reason", - ) - except TushareError as exc: - top_rows = [] - notices.append(f"个股龙虎榜辅助信息暂不可用:{exc}") - stock_context: dict[str, dict[str, Any]] = {} - for row in top_rows: - ts_code = str(row.get("ts_code") or "") - if ts_code and ts_code not in stock_context: - stock_context[ts_code] = row - - groups: dict[str, dict[str, Any]] = {} - for row in detail_rows: - trader_name = str(row.get("hm_name") or "未命名游资").strip() - ts_code = str(row.get("ts_code") or "").strip() - stock = stock_context.get(ts_code, {}) - directory_item = directory.get(trader_name, {}) - seat_name = _text(row.get("hm_orgs")) or directory_item.get("orgs") or "--" - buy = round(_number(row.get("buy_amount")) / 1000000, 2) - sell = round(_number(row.get("sell_amount")) / 1000000, 2) - net_buy = round(_number(row.get("net_amount")) / 1000000, 2) - group = groups.setdefault( - trader_name, - { - "name": trader_name, - "description": directory_item.get("description") or "", - "directory_orgs": directory_item.get("orgs") or "", - "identity_type": "trader", - "identity_source": "tushare_hm", - "recognized": True, - "buy_million": 0.0, - "sell_million": 0.0, - "net_buy_million": 0.0, - "seat_names": set(), - "stock_codes": set(), - "operations": [], - }, - ) - group["buy_million"] += buy - group["sell_million"] += sell - group["net_buy_million"] += net_buy - if seat_name != "--": - group["seat_names"].add(seat_name) - code = ts_code.split(".")[0] - if code: - group["stock_codes"].add(code) - group["operations"].append( - { - "code": code, - "ts_code": ts_code, - "name": row.get("ts_name") or stock.get("name") or "--", - "change": ( - _number(stock.get("pct_change")) - if stock.get("pct_change") is not None - else None - ), - "direction": "买入" if net_buy > 0 else "卖出" if net_buy < 0 else "持平", - "buy_million": buy, - "sell_million": sell, - "net_buy_million": net_buy, - "seat_name": seat_name, - "seat_alias": trader_name, - "tag": _text(row.get("tag")) or "--", - "reason": _text(stock.get("reason")) or "--", - } - ) - - traders = list(groups.values()) - traders.sort(key=lambda item: abs(item["net_buy_million"]), reverse=True) - for index, group in enumerate(traders, start=1): - group["id"] = f"hot-money-{index}" - group["buy_million"] = round(group["buy_million"], 2) - group["sell_million"] = round(group["sell_million"], 2) - group["net_buy_million"] = round(group["net_buy_million"], 2) - group["seat_count"] = len(group.pop("seat_names")) - group["stock_count"] = len(group.pop("stock_codes")) - group["operation_count"] = len(group["operations"]) - group["operations"].sort( - key=lambda item: abs(float(item.get("net_buy_million") or 0)), reverse=True - ) - - operation_count = sum(item["operation_count"] for item in traders) - active_stocks = { - operation["code"] for item in traders for operation in item["operations"] - if operation["code"] - } - net_buy_total = round(sum(item["net_buy_million"] for item in traders), 2) - status = "success" if detail_rows else "partial" if top_rows else "empty" - if not detail_rows: - notices.insert( - 0, - f"当日有 {len(stock_context)} 只股票上榜,但未返回可识别的游资每日明细。" - if top_rows - else "该交易日未返回龙虎榜或游资每日明细。", - ) - return { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(trade_date), - "source": "tushare", - "status": status, - "schema_version": 3, - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - "notice": ";".join(notices), - }, - "summary": { - "trader_count": len(traders), - "identity_count": len(traders), - "operation_count": operation_count, - "active_stock_count": len(active_stocks), - "seat_net_buy_million": net_buy_total, - "unclassified_count": 0, - "directory_count": len(directory), - "official_stock_count": len(stock_context), - }, - "traders": traders, - "unclassified_seats": [], - "rows": [], - } - - def stock_detail(self, ts_code: str, requested_date: str) -> dict[str, Any]: - trade_date, _ = self.resolve_trade_context(requested_date) - end = datetime.strptime(trade_date, "%Y%m%d") - start_date = (end - timedelta(days=190)).strftime("%Y%m%d") - daily = self.query( - "daily", - {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, - "ts_code,trade_date,open,high,low,close,pct_chg,vol,amount", - ) - factors = self.query( - "adj_factor", - {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, - "ts_code,trade_date,adj_factor", - ) - basics = self.query( - "stock_basic", - {"ts_code": ts_code}, - "ts_code,symbol,name,area,industry,market,list_date", - ) - daily_basics = self.query( - "daily_basic", - {"ts_code": ts_code, "trade_date": trade_date}, - "ts_code,trade_date,turnover_rate,volume_ratio,total_mv,circ_mv", - ) - moneyflow = self.query( - "moneyflow", - {"ts_code": ts_code, "trade_date": trade_date}, - "ts_code,trade_date,buy_sm_amount,sell_sm_amount,buy_md_amount,sell_md_amount," - "buy_lg_amount,sell_lg_amount,buy_elg_amount,sell_elg_amount,net_mf_amount", - ) - factor_map = {row["trade_date"]: _number(row.get("adj_factor"), 1) for row in factors} - latest_factor = max(factor_map.values(), default=1) or 1 - prices = [] - for row in sorted(daily, key=lambda item: item.get("trade_date", ""))[-90:]: - factor = factor_map.get(row.get("trade_date"), latest_factor) - ratio = factor / latest_factor - prices.append( - { - "trade_date": _display_date(str(row.get("trade_date", ""))), - "open": round(_number(row.get("open")) * ratio, 3), - "high": round(_number(row.get("high")) * ratio, 3), - "low": round(_number(row.get("low")) * ratio, 3), - "close": round(_number(row.get("close")) * ratio, 3), - "change": _number(row.get("pct_chg")), - "volume": _number(row.get("vol")), - "amount_billion": round(_number(row.get("amount")) / 100000, 2), - } - ) - flow = moneyflow[0] if moneyflow else {} - basic = basics[0] if basics else {} - daily_basic = daily_basics[0] if daily_basics else {} - latest = prices[-1] if prices else {} - actual_trade_date = max( - (str(row.get("trade_date") or "") for row in daily), - default=trade_date, - ) or trade_date - return { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(actual_trade_date), - "source": "tushare", - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - "notice": "", - }, - "stock": { - "code": ts_code.split(".")[0], - "ts_code": ts_code, - "name": basic.get("name") or "--", - "industry": basic.get("industry") or "其他", - "area": basic.get("area") or "--", - "market": basic.get("market") or "--", - "list_date": _display_date(str(basic.get("list_date") or "")), - "price": latest.get("close", 0), - "change": latest.get("change", 0), - "turnover_rate": _number(daily_basic.get("turnover_rate")), - "volume_ratio": _number(daily_basic.get("volume_ratio")), - "amount_billion": latest.get("amount_billion", 0), - }, - "prices": prices, - "moneyflow": { - "net_million": round(_number(flow.get("net_mf_amount")) / 100, 2), - "large_million": round( - (_number(flow.get("buy_lg_amount")) + _number(flow.get("buy_elg_amount")) - - _number(flow.get("sell_lg_amount")) - _number(flow.get("sell_elg_amount"))) / 100, - 2, - ), - "medium_million": round( - (_number(flow.get("buy_md_amount")) - _number(flow.get("sell_md_amount"))) / 100, - 2, - ), - "small_million": round( - (_number(flow.get("buy_sm_amount")) - _number(flow.get("sell_sm_amount"))) / 100, - 2, - ), - }, - } - - def stock_intraday(self, ts_code: str, requested_date: str) -> dict[str, Any]: - trade_date, _ = self.resolve_trade_context(requested_date) - display_date = _display_date(trade_date) - rows = self.query( - "stk_mins", - { - "ts_code": ts_code, - "freq": "1min", - "start_date": f"{display_date} 09:00:00", - "end_date": f"{display_date} 15:30:00", - }, - "ts_code,trade_time,open,close,high,low,vol,amount", - ) - points = [] - for row in sorted(rows, key=lambda item: str(item.get("trade_time") or "")): - trade_time = str(row.get("trade_time") or "") - if not trade_time: - continue - points.append( - { - "time": trade_time[-8:-3] if len(trade_time) >= 8 else trade_time, - "open": round(_number(row.get("open")), 3), - "high": round(_number(row.get("high")), 3), - "low": round(_number(row.get("low")), 3), - "close": round(_number(row.get("close")), 3), - "volume": _number(row.get("vol")), - "amount": _number(row.get("amount")), - } - ) - return {"trade_date": display_date, "points": points} - - def resolve_trade_context(self, requested: str) -> tuple[str, str]: - requested_rows = self.query( - "trade_cal", - {"exchange": "SSE", "start_date": requested, "end_date": requested}, - "cal_date,is_open,pretrade_date", - ) - if not requested_rows: - trade_date = requested - else: - row = requested_rows[0] - trade_date = row["cal_date"] if row.get("is_open") == 1 else row.get("pretrade_date", requested) - - resolved_rows = self.query( - "trade_cal", - {"exchange": "SSE", "start_date": trade_date, "end_date": trade_date}, - "cal_date,is_open,pretrade_date", - ) - previous = resolved_rows[0].get("pretrade_date") if resolved_rows else "" - return trade_date, previous or trade_date - - def _load_daily(self, trade_date: str) -> list[dict[str, Any]]: - return self.query( - "daily", - {"trade_date": trade_date}, - "ts_code,trade_date,open,high,low,close,pct_chg,amount", - ) - - def _load_limit_type(self, trade_date: str, limit_type: str) -> list[dict[str, Any]]: - fields = ( - "trade_date,ts_code,industry,name,close,pct_chg,amount,limit_amount," - "float_mv,total_mv,turnover_ratio,fd_amount,first_time,last_time," - "open_times,up_stat,limit_times" - ) - rows = self.query( - "limit_list_d", - {"trade_date": trade_date, "limit_type": limit_type}, - fields, - ) - for row in rows: - row["limit_type"] = limit_type - row["amount_unit"] = "yuan" - return rows - - def _load_limit_lists(self, trade_date: str) -> list[dict[str, Any]]: - rows: list[dict[str, Any]] = [] - for limit_type in ("U", "D", "Z"): - rows.extend(self._load_limit_type(trade_date, limit_type)) - return rows - - def _derive_limits( - self, - trade_date: str, - daily: list[dict[str, Any]], - price_limits: list[dict[str, Any]] | None = None, - basic_rows: list[dict[str, Any]] | None = None, - previous_limit_rows: list[dict[str, Any]] | None = None, - capital_rows: list[dict[str, Any]] | None = None, - ) -> list[dict[str, Any]]: - if price_limits is None: - price_limits = self.query( - "stk_limit", - {"trade_date": trade_date}, - "ts_code,trade_date,up_limit,down_limit", - ) - limit_map = {row["ts_code"]: row for row in price_limits} - if basic_rows is None: - basic_rows = self.query( - "stock_basic", - {"list_status": "L"}, - "ts_code,name,industry", - ) - basic_map = {row["ts_code"]: row for row in basic_rows} - previous_limit_map = { - str(row.get("ts_code") or ""): row for row in (previous_limit_rows or []) - } - capital_map = { - str(row.get("ts_code") or ""): row for row in (capital_rows or []) - } - - result: list[dict[str, Any]] = [] - for row in daily: - bounds = limit_map.get(row.get("ts_code")) - if not bounds or row.get("close") is None: - continue - limit_type = "" - if _prices_equal(row["close"], bounds.get("up_limit")): - limit_type = "U" - elif _prices_equal(row["close"], bounds.get("down_limit")): - limit_type = "D" - elif _prices_equal(row.get("high"), bounds.get("up_limit")): - limit_type = "Z" - if not limit_type: - continue - basic = basic_map.get(row["ts_code"], {}) - previous_limit = previous_limit_map.get(str(row.get("ts_code") or ""), {}) - streak = ( - max(1, int(_number(previous_limit.get("limit_times"), 1)) + 1) - if limit_type == "U" and previous_limit - else 1 - ) - item = { - **row, - "name": basic.get("name", "--"), - "industry": basic.get("industry") or "其他", - "limit_type": limit_type, - "limit_times": streak, - "open_times": 1 if limit_type == "Z" else 0, - "amount_unit": row.get("amount_unit") or "thousand_yuan", - } - if row.get("amount_unit") == "yuan": - capital = capital_map.get(str(row.get("ts_code") or ""), {}) - if not capital and capital_rows is None: - capital = self._latest_capital(str(row.get("ts_code") or ""), trade_date) - float_share = _number(capital.get("float_share")) - item["turnover_ratio"] = ( - _number(row.get("vol")) / float_share / 100 if float_share else 0 - ) - item["turnover_source"] = ( - "rt_volume/latest_float_share" if float_share else "unavailable" - ) - item["capital_trade_date"] = str(capital.get("trade_date") or "") - result.append(item) - return result - - @staticmethod - def _normalize_limit(row: dict[str, Any], status: str) -> dict[str, Any]: - amount = _number(row.get("amount")) - if row.get("amount_unit") == "thousand_yuan": - amount_billion = amount / 100000 - else: - amount_billion = amount / 100000000 - return { - "code": str(row.get("ts_code", "")).split(".")[0], - "ts_code": row.get("ts_code", ""), - "name": row.get("name") or "--", - "price": _number(row.get("close")), - "change": _number(row.get("pct_chg")), - "sector": row.get("industry") or "其他", - "reason": row.get("industry") or "待补充", - "first_time": _display_time(row.get("first_time")), - "last_time": _display_time(row.get("last_time")), - "open_times": int(_number(row.get("open_times"))), - "streak": max(1, int(_number(row.get("limit_times"), 1))), - "turnover_rate": _number(row.get("turnover_ratio")), - "turnover_source": row.get("turnover_source") or "provider", - "capital_trade_date": row.get("capital_trade_date") or "", - "amount_billion": round(amount_billion, 2), - "seal_amount_million": round(_number(row.get("fd_amount")) / 10000, 0), - "float_mv_billion": round(_number(row.get("float_mv")) / 100000000, 1), - "status": status, - } - - -def _text(value: Any) -> str: - if isinstance(value, (list, tuple, set)): - return "、".join(str(item).strip() for item in value if str(item).strip()) - return str(value or "").strip() - - -def _filter_members_by_listing( - members: list[dict[str, Any]], - listing_reference: dict[str, dict[str, Any]], - trade_date: str, -) -> tuple[list[dict[str, Any]], list[dict[str, str]]]: - eligible: list[dict[str, Any]] = [] - excluded: list[dict[str, str]] = [] - for member in members: - code = str(member.get("ts_code") or "") - listing = listing_reference.get(code) - if not listing: - eligible.append(member) - continue - list_date = str(listing.get("list_date") or "") - delist_date = str(listing.get("delist_date") or "") - reason = "" - effective_date = "" - if delist_date and delist_date <= trade_date: - reason = "目标日期前已退市" - effective_date = delist_date - elif list_date and list_date > trade_date: - reason = "目标日期尚未上市" - effective_date = list_date - if not reason: - eligible.append(member) - continue - excluded.append({ - "ts_code": code, - "name": str(member.get("name") or listing.get("name") or code), - "reason": reason, - "effective_date": effective_date, - }) - return eligible, excluded - - -def _sector_coverage_issue( - member_count: int, - quote_count: int, - coverage: float | None = None, - explained_count: int | None = None, -) -> str: - members = max(0, int(member_count or 0)) - quotes = max(0, min(int(quote_count or 0), members)) - if members <= 0: - if coverage is not None and float(coverage) >= 90: - return "" - if coverage is not None: - return "行业成分行情覆盖率低于90%" - return "申万有效成分为空" - explained = quotes if explained_count is None else max( - quotes, min(int(explained_count or 0), members) - ) - actual_coverage = ( - float(coverage) - if coverage is not None - else explained / members * 100 - ) - missing = members - explained - if members <= 7 and missing: - return f"小型行业有效成分状态仅确认 {explained}/{members},要求全部可解释" - if members <= 20 and (actual_coverage < 90 or missing > 1): - return f"中型行业有效成分状态仅确认 {explained}/{members},要求覆盖率至少90%且最多缺1只" - if members > 20 and actual_coverage < 90: - return f"行业有效成分状态仅确认 {explained}/{members},覆盖率低于90%" - return "" - - -def _membership_active_on(row: dict[str, Any], trade_date: str) -> bool: - start = str(row.get("in_date") or "") - end = str(row.get("out_date") or "") - return (not start or start <= trade_date) and (not end or end > trade_date) - - -def _reconcile_membership_rows(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: - """Merge duplicate Y/N membership rows before evaluating their date interval.""" - reconciled: dict[tuple[str, str, str, str, str], dict[str, Any]] = {} - for raw in rows: - row = dict(raw) - key = ( - str(row.get("ts_code") or ""), - str(row.get("l1_code") or ""), - str(row.get("l2_code") or ""), - str(row.get("l3_code") or ""), - str(row.get("in_date") or ""), - ) - current = reconciled.get(key) - if current is None: - reconciled[key] = row - continue - current_end = str(current.get("out_date") or "") - candidate_end = str(row.get("out_date") or "") - if candidate_end and not current_end: - current["out_date"] = candidate_end - current["is_new"] = row.get("is_new") or current.get("is_new") - for field, value in row.items(): - if not current.get(field) and value not in (None, ""): - current[field] = value - return list(reconciled.values()) - - -def _match_sector_row(rows: list[dict[str, Any]], identifier: str) -> dict[str, Any] | None: - if not rows: - return None - target = identifier.strip().upper() - code_match = next( - (row for row in rows if str(row.get("ts_code") or "").strip().upper() == target), - None, - ) - if code_match: - return code_match - - def normalized(value: Any) -> str: - text = str(value or "").strip().replace(" ", "") - for suffix in ("板块", "概念", "行业"): - text = text.removesuffix(suffix) - aliases = { - "元器件": "元件", - "电子元器件": "元件", - } - return aliases.get(text, text) - - target_name = normalized(identifier) - exact = [row for row in rows if normalized(row.get("name")) == target_name] - if exact: - return min(exact, key=_sector_match_priority) - fuzzy = [ - row for row in rows - if target_name and ( - target_name in normalized(row.get("name")) - or normalized(row.get("name")) in target_name - ) - ] - return min( - fuzzy, - key=lambda row: (len(normalized(row.get("name"))), *_sector_match_priority(row)), - ) if fuzzy else None - - -def _sector_match_priority(row: dict[str, Any]) -> tuple[int, int, int]: - code = str(row.get("ts_code") or "") - exchange = str(row.get("exchange") or "").upper() - return ( - 0 if exchange == "A" else 1, - 0 if code.startswith("881") else 1, - 0 if _number(row.get("count")) > 0 else 1, - ) - - -def _prices_equal(left: Any, right: Any) -> bool: - if left is None or right is None: - return False - return abs(_number(left) - _number(right)) < 0.005 - - -def _value_percentile(value: float, population: list[float]) -> float: - valid = sorted(item for item in population if item >= 0) - if not valid: - return 0.0 - below = sum(item < value for item in valid) - equal = sum(item == value for item in valid) - return (below + equal * 0.5) / len(valid) - - -def _trading_session_progress(current_time: dt_time) -> float: - morning_start = dt_time(9, 30) - morning_end = dt_time(11, 30) - afternoon_start = dt_time(13, 0) - afternoon_end = dt_time(15, 0) - if current_time <= morning_start: - return 0.05 - if current_time <= morning_end: - minutes = (current_time.hour * 60 + current_time.minute) - (9 * 60 + 30) - return max(0.05, min(0.5, minutes / 240)) - if current_time < afternoon_start: - return 0.5 - if current_time <= afternoon_end: - minutes = (current_time.hour * 60 + current_time.minute) - 13 * 60 - return max(0.5, min(1.0, 0.5 + minutes / 240)) - return 1.0 - - -def _display_time(value: Any) -> str: - raw = str(value or "").replace(":", "").zfill(6) - if not raw.strip("0"): - return "--" - return f"{raw[:2]}:{raw[2:4]}:{raw[4:6]}" - - -def _realtime_market_status(current_time: dt_time) -> str: - if current_time < dt_time(9, 25): - return "pre_open" - if current_time < dt_time(9, 30): - return "auction" - if current_time <= dt_time(11, 30) or dt_time(13, 0) <= current_time <= dt_time(15, 0): - return "trading" - if current_time < dt_time(13, 0): - return "lunch_break" - return "closed" - - -def _build_overview( - daily: list[dict[str, Any]], - up_rows: list[dict[str, Any]], - down_rows: list[dict[str, Any]], - broken_rows: list[dict[str, Any]], -) -> dict[str, Any]: - up_count = sum(1 for row in daily if _number(row.get("pct_chg")) > 0) - down_count = sum(1 for row in daily if _number(row.get("pct_chg")) < 0) - flat_count = len(daily) - up_count - down_count - amount_billion = sum( - _number(row.get("amount")) - / (100000000 if row.get("amount_unit") == "yuan" else 100000) - for row in daily - ) - limit_count = len(up_rows) - broken_count = len(broken_rows) - seal_rate = round(limit_count / max(limit_count + broken_count, 1) * 100, 1) - return { - "up_count": up_count, - "down_count": down_count, - "flat_count": flat_count, - "limit_up_count": limit_count, - "limit_down_count": len(down_rows), - "broken_count": broken_count, - "amount_billion": round(amount_billion, 1), - "seal_rate": seal_rate, - } - - -def _build_ladders(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: - groups: dict[int, list[dict[str, Any]]] = {} - for row in rows: - groups.setdefault(int(row.get("streak") or 1), []).append(row) - return [ - { - "level": level, - "label": "首板" if level == 1 else f"{level}板", - "count": len(stocks), - "stocks": sorted(stocks, key=lambda item: item.get("first_time") or "99:99:99"), - } - for level, stocks in sorted(groups.items(), reverse=True) - ] - - -def _build_sectors(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: - counts = Counter(row.get("sector") or "其他" for row in rows) - result: list[dict[str, Any]] = [] - for name, count in counts.most_common(20): - stocks = [row for row in rows if (row.get("sector") or "其他") == name] - max_streak = max(item.get("streak", 1) for item in stocks) - leader = max(stocks, key=lambda item: (item.get("streak", 1), item.get("amount_billion", 0))) - result.append( - { - "name": name, - "count": count, - "strength": min(100, 44 + count * 8 + max_streak * 5), - "amount_billion": round(sum(item.get("amount_billion", 0) for item in stocks), 1), - "leader": leader.get("name", "--"), - "change": round(sum(item.get("change", 0) for item in stocks) / count, 2), - "max_streak": max_streak, - } - ) - return result - - -def _build_yesterday_performance( - previous_limits: list[dict[str, Any]], - daily: list[dict[str, Any]], - current_limits: list[dict[str, Any]], - current_broken: list[dict[str, Any]], - current_down: list[dict[str, Any]], -) -> list[dict[str, Any]]: - daily_map = {str(row.get("ts_code", "")).split(".")[0]: row for row in daily} - limit_map = {row["code"]: row for row in current_limits} - broken_codes = {row["code"] for row in current_broken} - down_codes = {row["code"] for row in current_down} - result = [] - for previous in previous_limits: - code = previous["code"] - daily_row = daily_map.get(code, {}) - current = limit_map.get(code) - if current: - outcome = "晋级" - elif code in broken_codes: - outcome = "炸板" - elif code in down_codes: - outcome = "跌停" - else: - outcome = "断板" - result.append( - { - "code": code, - "name": previous["name"], - "prior_streak": previous.get("streak", 1), - "current_streak": current.get("streak", 0) if current else 0, - "current_change": _number(daily_row.get("pct_chg")), - "current_price": _number(daily_row.get("close")), - "sector": previous.get("sector", "其他"), - "reason": previous.get("reason", "待补充"), - "outcome": outcome, - } - ) - return result - - -def _build_limit_performance(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: - result = [] - for level in sorted({int(row.get("prior_streak") or 1) for row in rows}, reverse=True): - group = [row for row in rows if int(row.get("prior_streak") or 1) == level] - advanced = sum(row.get("outcome") == "晋级" for row in group) - positive = sum(_number(row.get("current_change")) > 0 for row in group) - result.append( - { - "level": level, - "label": "昨日首板" if level == 1 else f"昨日{level}板", - "count": len(group), - "advanced": advanced, - "advance_rate": round(advanced / len(group) * 100, 1), - "positive_rate": round(positive / len(group) * 100, 1), - "average_change": round(sum(_number(row.get("current_change")) for row in group) / len(group), 2), - } - ) - return result - - -def _build_sector_rotation( - current: list[dict[str, Any]], previous: list[dict[str, Any]] -) -> list[dict[str, Any]]: - previous_map = {row["name"]: row for row in previous} - result = [] - for index, sector in enumerate(current, start=1): - previous_count = int(previous_map.get(sector["name"], {}).get("count", 0)) - delta = int(sector["count"]) - previous_count - result.append( - { - **sector, - "rank": index, - "previous_count": previous_count, - "delta": delta, - "trend": "升温" if delta > 0 else "降温" if delta < 0 else "持平", - } - ) - return result diff --git a/backend/data/providers/tushare_daily.py b/backend/data/providers/tushare_daily.py new file mode 100644 index 0000000..bb09d32 --- /dev/null +++ b/backend/data/providers/tushare_daily.py @@ -0,0 +1,160 @@ +from __future__ import annotations + +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.data.providers.tushare_helpers import _display_time, _prices_equal + + +class DailyMarketMixin: + def resolve_trade_context(self, requested: str) -> tuple[str, str]: + requested_rows = self.query( + "trade_cal", + {"exchange": "SSE", "start_date": requested, "end_date": requested}, + "cal_date,is_open,pretrade_date", + ) + if not requested_rows: + trade_date = requested + else: + row = requested_rows[0] + trade_date = row["cal_date"] if row.get("is_open") == 1 else row.get("pretrade_date", requested) + + resolved_rows = self.query( + "trade_cal", + {"exchange": "SSE", "start_date": trade_date, "end_date": trade_date}, + "cal_date,is_open,pretrade_date", + ) + previous = resolved_rows[0].get("pretrade_date") if resolved_rows else "" + return trade_date, previous or trade_date + + def _load_daily(self, trade_date: str) -> list[dict[str, Any]]: + return self.query( + "daily", + {"trade_date": trade_date}, + "ts_code,trade_date,open,high,low,close,pct_chg,amount", + ) + + def _load_limit_type(self, trade_date: str, limit_type: str) -> list[dict[str, Any]]: + fields = ( + "trade_date,ts_code,industry,name,close,pct_chg,amount,limit_amount," + "float_mv,total_mv,turnover_ratio,fd_amount,first_time,last_time," + "open_times,up_stat,limit_times" + ) + rows = self.query( + "limit_list_d", + {"trade_date": trade_date, "limit_type": limit_type}, + fields, + ) + for row in rows: + row["limit_type"] = limit_type + row["amount_unit"] = "yuan" + return rows + + def _load_limit_lists(self, trade_date: str) -> list[dict[str, Any]]: + rows: list[dict[str, Any]] = [] + for limit_type in ("U", "D", "Z"): + rows.extend(self._load_limit_type(trade_date, limit_type)) + return rows + + def _derive_limits( + self, + trade_date: str, + daily: list[dict[str, Any]], + price_limits: list[dict[str, Any]] | None = None, + basic_rows: list[dict[str, Any]] | None = None, + previous_limit_rows: list[dict[str, Any]] | None = None, + capital_rows: list[dict[str, Any]] | None = None, + ) -> list[dict[str, Any]]: + if price_limits is None: + price_limits = self.query( + "stk_limit", + {"trade_date": trade_date}, + "ts_code,trade_date,up_limit,down_limit", + ) + limit_map = {row["ts_code"]: row for row in price_limits} + if basic_rows is None: + basic_rows = self.query( + "stock_basic", + {"list_status": "L"}, + "ts_code,name,industry", + ) + basic_map = {row["ts_code"]: row for row in basic_rows} + previous_limit_map = { + str(row.get("ts_code") or ""): row for row in (previous_limit_rows or []) + } + capital_map = { + str(row.get("ts_code") or ""): row for row in (capital_rows or []) + } + + result: list[dict[str, Any]] = [] + for row in daily: + bounds = limit_map.get(row.get("ts_code")) + if not bounds or row.get("close") is None: + continue + limit_type = "" + if _prices_equal(row["close"], bounds.get("up_limit")): + limit_type = "U" + elif _prices_equal(row["close"], bounds.get("down_limit")): + limit_type = "D" + elif _prices_equal(row.get("high"), bounds.get("up_limit")): + limit_type = "Z" + if not limit_type: + continue + basic = basic_map.get(row["ts_code"], {}) + previous_limit = previous_limit_map.get(str(row.get("ts_code") or ""), {}) + streak = ( + max(1, int(_number(previous_limit.get("limit_times"), 1)) + 1) + if limit_type == "U" and previous_limit + else 1 + ) + item = { + **row, + "name": basic.get("name", "--"), + "industry": basic.get("industry") or "其他", + "limit_type": limit_type, + "limit_times": streak, + "open_times": 1 if limit_type == "Z" else 0, + "amount_unit": row.get("amount_unit") or "thousand_yuan", + } + if row.get("amount_unit") == "yuan": + capital = capital_map.get(str(row.get("ts_code") or ""), {}) + if not capital and capital_rows is None: + capital = self._latest_capital(str(row.get("ts_code") or ""), trade_date) + float_share = _number(capital.get("float_share")) + item["turnover_ratio"] = ( + _number(row.get("vol")) / float_share / 100 if float_share else 0 + ) + item["turnover_source"] = ( + "rt_volume/latest_float_share" if float_share else "unavailable" + ) + item["capital_trade_date"] = str(capital.get("trade_date") or "") + result.append(item) + return result + + @staticmethod + def _normalize_limit(row: dict[str, Any], status: str) -> dict[str, Any]: + amount = _number(row.get("amount")) + if row.get("amount_unit") == "thousand_yuan": + amount_billion = amount / 100000 + else: + amount_billion = amount / 100000000 + return { + "code": str(row.get("ts_code", "")).split(".")[0], + "ts_code": row.get("ts_code", ""), + "name": row.get("name") or "--", + "price": _number(row.get("close")), + "change": _number(row.get("pct_chg")), + "sector": row.get("industry") or "其他", + "reason": row.get("industry") or "待补充", + "first_time": _display_time(row.get("first_time")), + "last_time": _display_time(row.get("last_time")), + "open_times": int(_number(row.get("open_times"))), + "streak": max(1, int(_number(row.get("limit_times"), 1))), + "turnover_rate": _number(row.get("turnover_ratio")), + "turnover_source": row.get("turnover_source") or "provider", + "capital_trade_date": row.get("capital_trade_date") or "", + "amount_billion": round(amount_billion, 2), + "seal_amount_million": round(_number(row.get("fd_amount")) / 10000, 0), + "float_mv_billion": round(_number(row.get("float_mv")) / 100000000, 1), + "status": status, + } diff --git a/backend/data/providers/tushare_dashboard.py b/backend/data/providers/tushare_dashboard.py new file mode 100644 index 0000000..b7e98c1 --- /dev/null +++ b/backend/data/providers/tushare_dashboard.py @@ -0,0 +1,644 @@ +from __future__ import annotations + +from collections import Counter +from datetime import datetime, time as dt_time, timedelta +from typing import Any + +from backend.bootstrap.config import display_compact_date as _display_date +from backend.data.numbers import finite_number as _number +from backend.features.sentiment.engine import apply_sentiment_to_dashboard +from backend.data.providers.tushare_helpers import ( + _realtime_market_status, + _trading_session_progress, + _value_percentile, +) +from backend.data.providers.tushare_transport import TushareError + + +class DashboardMixin: + def dashboard(self, requested_date: str) -> dict[str, Any]: + trade_date, previous_trade_date = self.resolve_trade_context(requested_date) + if self.should_use_realtime(requested_date, trade_date): + return self._realtime_dashboard( + requested_date, + trade_date, + previous_trade_date, + ) + + daily = self._load_daily(trade_date) + if ( + not daily + and requested_date == datetime.now().astimezone().strftime("%Y%m%d") + and trade_date == requested_date + and datetime.now().astimezone().time().replace(tzinfo=None) >= dt_time(9, 15) + ): + return self._realtime_dashboard( + requested_date, + trade_date, + previous_trade_date, + ) + if not daily: + raise TushareError(f"No daily data returned for {trade_date}") + + notices: list[str] = [] + try: + limit_rows = self._load_limit_lists(trade_date) + previous_limit_rows = self._load_limit_type(previous_trade_date, "U") + if not limit_rows: + notices.append("涨跌停高级接口当日数据尚未更新,已使用日线数据推算。") + limit_rows = self._derive_limits(trade_date, daily) + except TushareError as exc: + notices.append(f"涨跌停高级接口不可用,已使用日线数据推算:{exc}") + limit_rows = self._derive_limits(trade_date, daily) + previous_daily = self._load_daily(previous_trade_date) + previous_limit_rows = [ + row for row in self._derive_limits(previous_trade_date, previous_daily) + if row.get("limit_type") == "U" + ] + + up_rows = [row for row in limit_rows if row.get("limit_type") == "U"] + down_rows = [row for row in limit_rows if row.get("limit_type") == "D"] + broken_rows = [row for row in limit_rows if row.get("limit_type") == "Z"] + limits = [self._normalize_limit(row, "涨停") for row in up_rows] + broken = [self._normalize_limit(row, "炸板") for row in broken_rows] + down_limits = [self._normalize_limit(row, "跌停") for row in down_rows] + previous_limits = [self._normalize_limit(row, "涨停") for row in previous_limit_rows] + yesterday_limits = _build_yesterday_performance( + previous_limits, + daily, + limits, + broken, + down_limits, + ) + sectors = _build_sectors(limits) + previous_sectors = _build_sectors(previous_limits) + + dashboard = { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(trade_date), + "previous_trade_date": _display_date(previous_trade_date), + "source": "tushare", + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "notice": ";".join(notices), + }, + "overview": _build_overview(daily, up_rows, down_rows, broken_rows), + "limits": limits, + "broken": broken, + "down_limits": down_limits, + "yesterday_limits": yesterday_limits, + "limit_performance": _build_limit_performance(yesterday_limits), + "ladders": _build_ladders(limits), + "sectors": sectors, + "sector_rotation": _build_sector_rotation(sectors, previous_sectors), + } + return apply_sentiment_to_dashboard(dashboard) + + @staticmethod + def should_use_realtime(requested_date: str, trade_date: str) -> bool: + """Use rt_k for today's open market until end-of-day datasets settle.""" + now = datetime.now().astimezone() + today = now.strftime("%Y%m%d") + return ( + requested_date == today + and trade_date == today + and dt_time(9, 15) <= now.time().replace(tzinfo=None) < dt_time(16, 30) + ) + + def _realtime_dashboard( + self, + requested_date: str, + trade_date: str, + previous_trade_date: str, + ) -> dict[str, Any]: + reference = self._load_realtime_reference(trade_date, previous_trade_date) + basic_rows = list(reference["basic_rows"]) + codes = ",".join( + str(row.get("ts_code") or "") for row in basic_rows if row.get("ts_code") + ) + if not codes: + raise TushareError("No active stock codes available for rt_k") + quotes = self.query("rt_k", {"ts_code": codes}) + if not quotes: + raise TushareError(f"No realtime data returned for {trade_date}") + + basic_map = {str(row.get("ts_code") or ""): row for row in basic_rows} + daily: list[dict[str, Any]] = [] + for quote in quotes: + close = _number(quote.get("close")) + previous_close = _number(quote.get("pre_close")) + if close <= 0 or previous_close <= 0: + continue + basic = basic_map.get(str(quote.get("ts_code") or ""), {}) + daily.append( + { + **quote, + "trade_date": trade_date, + "name": str(quote.get("name") or basic.get("name") or "--").strip(), + "industry": basic.get("industry") or "其他", + "pct_chg": round((close / previous_close - 1) * 100, 4), + "amount_unit": "yuan", + } + ) + with self._realtime_reference_lock: + self._latest_realtime_market[trade_date] = { + "rows": daily, + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + } + if len(self._latest_realtime_market) > 3: + oldest = next(iter(self._latest_realtime_market)) + self._latest_realtime_market.pop(oldest, None) + + limit_rows = self._derive_limits( + trade_date, + daily, + price_limits=list(reference["price_limits"]), + basic_rows=basic_rows, + previous_limit_rows=list(reference["previous_limit_rows"]), + capital_rows=list(reference["capital_rows"]), + ) + previous_limit_rows = list(reference["previous_limit_rows"]) + up_rows = [row for row in limit_rows if row.get("limit_type") == "U"] + down_rows = [row for row in limit_rows if row.get("limit_type") == "D"] + broken_rows = [row for row in limit_rows if row.get("limit_type") == "Z"] + limits = [self._normalize_limit(row, "涨停") for row in up_rows] + broken = [self._normalize_limit(row, "炸板") for row in broken_rows] + down_limits = [self._normalize_limit(row, "跌停") for row in down_rows] + previous_limits = [self._normalize_limit(row, "涨停") for row in previous_limit_rows] + yesterday_limits = _build_yesterday_performance( + previous_limits, + daily, + limits, + broken, + down_limits, + ) + sectors = _build_sectors(limits) + previous_sectors = _build_sectors(previous_limits) + now = datetime.now().astimezone() + market_status = _realtime_market_status(now.time().replace(tzinfo=None)) + dashboard = { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(trade_date), + "previous_trade_date": _display_date(previous_trade_date), + "source": "tushare", + "mode": "realtime", + "realtime": True, + "market_status": market_status, + "refresh_mode": "manual", + "auto_refresh": False, + "quote_count": len(daily), + "updated_at": now.isoformat(timespec="seconds"), + "notice": "盘中行情由 Tushare rt_k 实时计算;涨停原因、封板时间和开板次数以盘后榜单校正为准。", + }, + "overview": _build_overview(daily, up_rows, down_rows, broken_rows), + "limits": limits, + "broken": broken, + "down_limits": down_limits, + "yesterday_limits": yesterday_limits, + "limit_performance": _build_limit_performance(yesterday_limits), + "ladders": _build_ladders(limits), + "sectors": sectors, + "sector_rotation": _build_sector_rotation(sectors, previous_sectors), + } + return apply_sentiment_to_dashboard(dashboard) + + def _load_realtime_reference( + self, + trade_date: str, + previous_trade_date: str, + ) -> dict[str, Any]: + cache_key = f"{trade_date}:{previous_trade_date}" + with self._realtime_reference_lock: + cached = self._realtime_reference_cache.get(cache_key) + if cached: + return cached + + basic_rows = self.query( + "stock_basic", + {"exchange": "", "list_status": "L"}, + "ts_code,name,industry,market,list_date", + ) + price_limits = self.query( + "stk_limit", + {"trade_date": trade_date}, + "ts_code,trade_date,up_limit,down_limit", + ) + previous_limit_rows = self._load_limit_type(previous_trade_date, "U") + capital_rows = self.query( + "daily_basic", + {"trade_date": previous_trade_date}, + "ts_code,trade_date,total_share,float_share,free_share,total_mv,circ_mv", + ) + if not basic_rows or not price_limits: + raise TushareError(f"Realtime reference data is incomplete for {trade_date}") + result = { + "basic_rows": basic_rows, + "price_limits": price_limits, + "previous_limit_rows": previous_limit_rows, + "capital_rows": capital_rows, + } + with self._realtime_reference_lock: + self._realtime_reference_cache[cache_key] = result + if len(self._realtime_reference_cache) > 3: + oldest = next(iter(self._realtime_reference_cache)) + self._realtime_reference_cache.pop(oldest, None) + return result + + def realtime_stock_quote( + self, + ts_code: str, + reference_date: str = "", + ) -> dict[str, Any]: + rows = self.query("rt_k", {"ts_code": ts_code}) + if not rows: + raise TushareError(f"No realtime quote returned for {ts_code}") + row = rows[0] + close = _number(row.get("close")) + previous_close = _number(row.get("pre_close")) + if close <= 0 or previous_close <= 0: + raise TushareError(f"Realtime quote is unavailable for {ts_code}") + + basic: dict[str, Any] = {} + with self._realtime_reference_lock: + references = list(self._realtime_reference_cache.values()) + for reference in reversed(references): + basic = next( + ( + item for item in reference.get("basic_rows") or [] + if str(item.get("ts_code") or "") == ts_code + ), + {}, + ) + if basic: + break + if not basic: + basics = self.query( + "stock_basic", + {"ts_code": ts_code}, + "ts_code,name,industry,market,list_date", + ) + basic = basics[0] if basics else {} + capital = self._latest_capital(ts_code, reference_date) + float_share = _number(capital.get("float_share")) + # rt_k volume is shares; daily_basic float_share is reported in 10k shares. + turnover_rate = _number(row.get("vol")) / float_share / 100 if float_share else 0 + market_date = reference_date or datetime.now().astimezone().strftime("%Y%m%d") + self._ensure_realtime_market_cache(market_date) + with self._realtime_reference_lock: + market_rows = list((self._latest_realtime_market.get(market_date) or {}).get("rows") or []) + references = list(self._realtime_reference_cache.values()) + capital_map: dict[str, dict[str, Any]] = {} + for reference in reversed(references): + capital_map = { + str(item.get("ts_code") or ""): item + for item in reference.get("capital_rows") or [] + } + if capital_map: + break + market_amounts = [_number(item.get("amount")) for item in market_rows if _number(item.get("amount")) > 0] + amount_percentile = _value_percentile(_number(row.get("amount")), market_amounts) + market_turnovers = [] + for item in market_rows: + item_capital = capital_map.get(str(item.get("ts_code") or ""), {}) + item_float_share = _number(item_capital.get("float_share")) + if item_float_share: + market_turnovers.append(_number(item.get("vol")) / item_float_share / 100) + market_turnover = ( + sum(market_turnovers) / len(market_turnovers) if market_turnovers else 0 + ) + turnover_relative = turnover_rate / market_turnover if market_turnover else 0 + activity = self._stock_activity_metrics( + ts_code, + market_date, + _number(row.get("vol")) / 100, + ) + return { + "code": ts_code.split(".")[0], + "ts_code": ts_code, + "name": str(row.get("name") or basic.get("name") or "--").strip(), + "sector": basic.get("industry") or "其他", + "price": round(close, 3), + "change": round((close / previous_close - 1) * 100, 4), + "open": round(_number(row.get("open")), 3), + "high": round(_number(row.get("high")), 3), + "low": round(_number(row.get("low")), 3), + "previous_close": round(previous_close, 3), + "amount_billion": round(_number(row.get("amount")) / 100000000, 3), + "volume": _number(row.get("vol")), + "trade_count": int(_number(row.get("num"))), + "turnover_rate": round(turnover_rate, 4), + "market_turnover_rate": round(market_turnover, 4), + "turnover_relative": round(turnover_relative, 4), + "amount_percentile": round(amount_percentile * 100, 2), + "volume_activity_ratio": activity.get("volume_activity_ratio", 0), + "activity_history_date": activity.get("history_trade_date", ""), + "activity_source": activity.get("source", "unavailable"), + "float_share_10k": float_share, + "capital_trade_date": str(capital.get("trade_date") or ""), + "turnover_source": "rt_volume/latest_float_share" if float_share else "unavailable", + "data_source": "tushare", + "realtime": True, + } + + def _stock_activity_metrics( + self, + ts_code: str, + reference_date: str, + current_volume_lots: float, + ) -> dict[str, Any]: + cache_key = f"{ts_code}:{reference_date}" + with self._realtime_reference_lock: + history = self._stock_activity_cache.get(cache_key) + if history is None: + try: + end = datetime.strptime(reference_date, "%Y%m%d") + except ValueError: + end = datetime.now().astimezone().replace(tzinfo=None) + rows = self.query( + "daily", + { + "ts_code": ts_code, + "start_date": (end - timedelta(days=30)).strftime("%Y%m%d"), + "end_date": reference_date, + }, + "ts_code,trade_date,vol,amount", + ) + completed = [ + item for item in rows + if str(item.get("trade_date") or "") < reference_date and _number(item.get("vol")) > 0 + ] + completed.sort(key=lambda item: str(item.get("trade_date") or "")) + recent = completed[-5:] + history = { + "average_volume_lots": ( + sum(_number(item.get("vol")) for item in recent) / len(recent) + if recent else 0 + ), + "history_trade_date": str(recent[-1].get("trade_date") or "") if recent else "", + } + with self._realtime_reference_lock: + self._stock_activity_cache[cache_key] = history + if len(self._stock_activity_cache) > 256: + oldest = next(iter(self._stock_activity_cache)) + self._stock_activity_cache.pop(oldest, None) + average_volume = _number(history.get("average_volume_lots")) + progress = _trading_session_progress(datetime.now().astimezone().time().replace(tzinfo=None)) + expected_volume = average_volume * progress + ratio = current_volume_lots / expected_volume if expected_volume else 0 + return { + **history, + "volume_activity_ratio": round(ratio, 4), + "session_progress": round(progress, 4), + "source": "rt_volume/5d_average_at_same_progress" if expected_volume else "unavailable", + } + + def realtime_factor_snapshot(self, requested_date: str) -> dict[str, Any]: + trade_date, previous_trade_date = self.resolve_trade_context(requested_date) + reference = self._load_realtime_reference(trade_date, previous_trade_date) + codes = [ + str(row.get("ts_code") or "") + for row in reference.get("basic_rows") or [] + if row.get("ts_code") + ] + quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") + capital_map = { + str(row.get("ts_code") or ""): row + for row in reference.get("capital_rows") or [] + } + rows = [] + for quote in quotes: + ts_code = str(quote.get("ts_code") or "") + close = _number(quote.get("close")) + previous_close = _number(quote.get("pre_close")) + if not ts_code or close <= 0 or previous_close <= 0: + continue + capital = capital_map.get(ts_code, {}) + float_share = _number(capital.get("float_share")) + rows.append( + { + "ts_code": ts_code, + "trade_date": trade_date, + "open": _number(quote.get("open")), + "high": _number(quote.get("high")), + "low": _number(quote.get("low")), + "close": close, + "pct_chg": (close / previous_close - 1) * 100, + "vol": _number(quote.get("vol")) / 100, + "amount": _number(quote.get("amount")), + "turnover_rate": ( + _number(quote.get("vol")) / float_share / 100 if float_share else 0 + ), + "capital_trade_date": str(capital.get("trade_date") or ""), + } + ) + if not rows: + raise TushareError(f"No realtime factor snapshot returned for {trade_date}") + return { + "trade_date": trade_date, + "previous_trade_date": previous_trade_date, + "source": "tushare_rt_k", + "realtime": True, + "rows": rows, + } + + def _ensure_realtime_market_cache(self, requested_date: str) -> list[dict[str, Any]]: + with self._realtime_reference_lock: + cached = list( + (self._latest_realtime_market.get(requested_date) or {}).get("rows") or [] + ) + if cached: + return cached + trade_date, previous_trade_date = self.resolve_trade_context(requested_date) + if trade_date != requested_date: + return [] + reference = self._load_realtime_reference(trade_date, previous_trade_date) + codes = [ + str(row.get("ts_code") or "") + for row in reference.get("basic_rows") or [] + if row.get("ts_code") + ] + quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") + rows = [ + row for row in quotes + if _number(row.get("close")) > 0 and _number(row.get("pre_close")) > 0 + ] + with self._realtime_reference_lock: + self._latest_realtime_market[trade_date] = { + "rows": rows, + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + } + return rows + + def _latest_capital(self, ts_code: str, reference_date: str = "") -> dict[str, Any]: + end_date = reference_date or datetime.now().astimezone().strftime("%Y%m%d") + cache_key = f"{ts_code}:{end_date}" + with self._realtime_reference_lock: + cached = self._capital_cache.get(cache_key) + if cached: + return cached + try: + end = datetime.strptime(end_date, "%Y%m%d") + except ValueError: + end = datetime.now().astimezone().replace(tzinfo=None) + end_date = end.strftime("%Y%m%d") + start_date = (end - timedelta(days=20)).strftime("%Y%m%d") + rows = self.query( + "daily_basic", + {"ts_code": ts_code, "start_date": start_date, "end_date": end_date}, + "ts_code,trade_date,turnover_rate,volume_ratio,total_share,float_share," + "free_share,total_mv,circ_mv", + ) + rows.sort(key=lambda item: str(item.get("trade_date") or "")) + result = rows[-1] if rows else {} + with self._realtime_reference_lock: + self._capital_cache[cache_key] = result + if len(self._capital_cache) > 256: + oldest = next(iter(self._capital_cache)) + self._capital_cache.pop(oldest, None) + return result + + +def _build_overview( + daily: list[dict[str, Any]], + up_rows: list[dict[str, Any]], + down_rows: list[dict[str, Any]], + broken_rows: list[dict[str, Any]], +) -> dict[str, Any]: + up_count = sum(1 for row in daily if _number(row.get("pct_chg")) > 0) + down_count = sum(1 for row in daily if _number(row.get("pct_chg")) < 0) + flat_count = len(daily) - up_count - down_count + amount_billion = sum( + _number(row.get("amount")) + / (100000000 if row.get("amount_unit") == "yuan" else 100000) + for row in daily + ) + limit_count = len(up_rows) + broken_count = len(broken_rows) + seal_rate = round(limit_count / max(limit_count + broken_count, 1) * 100, 1) + return { + "up_count": up_count, + "down_count": down_count, + "flat_count": flat_count, + "limit_up_count": limit_count, + "limit_down_count": len(down_rows), + "broken_count": broken_count, + "amount_billion": round(amount_billion, 1), + "seal_rate": seal_rate, + } + + +def _build_ladders(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: + groups: dict[int, list[dict[str, Any]]] = {} + for row in rows: + groups.setdefault(int(row.get("streak") or 1), []).append(row) + return [ + { + "level": level, + "label": "首板" if level == 1 else f"{level}板", + "count": len(stocks), + "stocks": sorted(stocks, key=lambda item: item.get("first_time") or "99:99:99"), + } + for level, stocks in sorted(groups.items(), reverse=True) + ] + + +def _build_sectors(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: + counts = Counter(row.get("sector") or "其他" for row in rows) + result: list[dict[str, Any]] = [] + for name, count in counts.most_common(20): + stocks = [row for row in rows if (row.get("sector") or "其他") == name] + max_streak = max(item.get("streak", 1) for item in stocks) + leader = max(stocks, key=lambda item: (item.get("streak", 1), item.get("amount_billion", 0))) + result.append( + { + "name": name, + "count": count, + "strength": min(100, 44 + count * 8 + max_streak * 5), + "amount_billion": round(sum(item.get("amount_billion", 0) for item in stocks), 1), + "leader": leader.get("name", "--"), + "change": round(sum(item.get("change", 0) for item in stocks) / count, 2), + "max_streak": max_streak, + } + ) + return result + + +def _build_yesterday_performance( + previous_limits: list[dict[str, Any]], + daily: list[dict[str, Any]], + current_limits: list[dict[str, Any]], + current_broken: list[dict[str, Any]], + current_down: list[dict[str, Any]], +) -> list[dict[str, Any]]: + daily_map = {str(row.get("ts_code", "")).split(".")[0]: row for row in daily} + limit_map = {row["code"]: row for row in current_limits} + broken_codes = {row["code"] for row in current_broken} + down_codes = {row["code"] for row in current_down} + result = [] + for previous in previous_limits: + code = previous["code"] + daily_row = daily_map.get(code, {}) + current = limit_map.get(code) + if current: + outcome = "晋级" + elif code in broken_codes: + outcome = "炸板" + elif code in down_codes: + outcome = "跌停" + else: + outcome = "断板" + result.append( + { + "code": code, + "name": previous["name"], + "prior_streak": previous.get("streak", 1), + "current_streak": current.get("streak", 0) if current else 0, + "current_change": _number(daily_row.get("pct_chg")), + "current_price": _number(daily_row.get("close")), + "sector": previous.get("sector", "其他"), + "reason": previous.get("reason", "待补充"), + "outcome": outcome, + } + ) + return result + + +def _build_limit_performance(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: + result = [] + for level in sorted({int(row.get("prior_streak") or 1) for row in rows}, reverse=True): + group = [row for row in rows if int(row.get("prior_streak") or 1) == level] + advanced = sum(row.get("outcome") == "晋级" for row in group) + positive = sum(_number(row.get("current_change")) > 0 for row in group) + result.append( + { + "level": level, + "label": "昨日首板" if level == 1 else f"昨日{level}板", + "count": len(group), + "advanced": advanced, + "advance_rate": round(advanced / len(group) * 100, 1), + "positive_rate": round(positive / len(group) * 100, 1), + "average_change": round(sum(_number(row.get("current_change")) for row in group) / len(group), 2), + } + ) + return result + + +def _build_sector_rotation( + current: list[dict[str, Any]], previous: list[dict[str, Any]] +) -> list[dict[str, Any]]: + previous_map = {row["name"]: row for row in previous} + result = [] + for index, sector in enumerate(current, start=1): + previous_count = int(previous_map.get(sector["name"], {}).get("count", 0)) + delta = int(sector["count"]) - previous_count + result.append( + { + **sector, + "rank": index, + "previous_count": previous_count, + "delta": delta, + "trend": "升温" if delta > 0 else "降温" if delta < 0 else "持平", + } + ) + return result diff --git a/backend/data/providers/tushare_dragon_tiger.py b/backend/data/providers/tushare_dragon_tiger.py new file mode 100644 index 0000000..f81b304 --- /dev/null +++ b/backend/data/providers/tushare_dragon_tiger.py @@ -0,0 +1,214 @@ +from __future__ import annotations + +import json +import re +from datetime import datetime +from typing import Any + +from backend.bootstrap.config import display_compact_date as _display_date +from backend.data.numbers import finite_number as _number +from backend.data.providers.tushare_helpers import _text +from backend.data.providers.tushare_transport import TushareError + + +class DragonTigerMixin: + def hot_money_profiles(self) -> dict[str, Any]: + rows = self.query("hm_list", {}, "name,desc,orgs") + profiles: list[dict[str, Any]] = [] + seen_names: set[str] = set() + for row in rows: + name = str(row.get("name") or "").strip() + if not name or name in seen_names: + continue + seen_names.add(name) + description = _text(row.get("desc")) + organization_text = _text(row.get("orgs")) + parsed_organizations: Any = None + if organization_text.startswith("["): + try: + parsed_organizations = json.loads(organization_text) + except json.JSONDecodeError: + parsed_organizations = None + organization_parts = ( + parsed_organizations + if isinstance(parsed_organizations, list) + else re.split(r"[,,;;\n]+", organization_text) + ) + organizations = list(dict.fromkeys( + _text(part) + for part in organization_parts + if _text(part) + )) + profiles.append( + { + "id": f"hot-money-profile-{len(profiles) + 1}", + "name": name, + "description": description, + "organizations": organizations, + "organization_count": len(organizations), + } + ) + return { + "meta": { + "source": "tushare", + "status": "success" if profiles else "empty", + "schema_version": 1, + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "notice": "", + }, + "summary": { + "profile_count": len(profiles), + "described_count": sum(bool(item["description"]) for item in profiles), + "organization_count": sum(item["organization_count"] for item in profiles), + }, + "profiles": profiles, + } + + def dragon_tiger(self, requested_date: str) -> dict[str, Any]: + trade_date, _ = self.resolve_trade_context(requested_date) + detail_rows = self.query( + "hm_detail", + {"trade_date": trade_date}, + "trade_date,ts_code,ts_name,buy_amount,sell_amount,net_amount," + "hm_name,hm_orgs,tag", + ) + + notices: list[str] = [] + try: + directory_rows = self.query("hm_list", {}, "name,desc,orgs") + except TushareError as exc: + directory_rows = [] + notices.append(f"游资名录暂不可用:{exc}") + directory = { + str(row.get("name") or "").strip(): { + "description": _text(row.get("desc")), + "orgs": _text(row.get("orgs")), + } + for row in directory_rows + if str(row.get("name") or "").strip() + } + + # 个股龙虎榜仅用于补充涨幅和上榜原因,不参与游资身份识别。 + try: + top_rows = self.query( + "top_list", + {"trade_date": trade_date}, + "trade_date,ts_code,name,pct_change,reason", + ) + except TushareError as exc: + top_rows = [] + notices.append(f"个股龙虎榜辅助信息暂不可用:{exc}") + stock_context: dict[str, dict[str, Any]] = {} + for row in top_rows: + ts_code = str(row.get("ts_code") or "") + if ts_code and ts_code not in stock_context: + stock_context[ts_code] = row + + groups: dict[str, dict[str, Any]] = {} + for row in detail_rows: + trader_name = str(row.get("hm_name") or "未命名游资").strip() + ts_code = str(row.get("ts_code") or "").strip() + stock = stock_context.get(ts_code, {}) + directory_item = directory.get(trader_name, {}) + seat_name = _text(row.get("hm_orgs")) or directory_item.get("orgs") or "--" + buy = round(_number(row.get("buy_amount")) / 1000000, 2) + sell = round(_number(row.get("sell_amount")) / 1000000, 2) + net_buy = round(_number(row.get("net_amount")) / 1000000, 2) + group = groups.setdefault( + trader_name, + { + "name": trader_name, + "description": directory_item.get("description") or "", + "directory_orgs": directory_item.get("orgs") or "", + "identity_type": "trader", + "identity_source": "tushare_hm", + "recognized": True, + "buy_million": 0.0, + "sell_million": 0.0, + "net_buy_million": 0.0, + "seat_names": set(), + "stock_codes": set(), + "operations": [], + }, + ) + group["buy_million"] += buy + group["sell_million"] += sell + group["net_buy_million"] += net_buy + if seat_name != "--": + group["seat_names"].add(seat_name) + code = ts_code.split(".")[0] + if code: + group["stock_codes"].add(code) + group["operations"].append( + { + "code": code, + "ts_code": ts_code, + "name": row.get("ts_name") or stock.get("name") or "--", + "change": ( + _number(stock.get("pct_change")) + if stock.get("pct_change") is not None + else None + ), + "direction": "买入" if net_buy > 0 else "卖出" if net_buy < 0 else "持平", + "buy_million": buy, + "sell_million": sell, + "net_buy_million": net_buy, + "seat_name": seat_name, + "seat_alias": trader_name, + "tag": _text(row.get("tag")) or "--", + "reason": _text(stock.get("reason")) or "--", + } + ) + + traders = list(groups.values()) + traders.sort(key=lambda item: abs(item["net_buy_million"]), reverse=True) + for index, group in enumerate(traders, start=1): + group["id"] = f"hot-money-{index}" + group["buy_million"] = round(group["buy_million"], 2) + group["sell_million"] = round(group["sell_million"], 2) + group["net_buy_million"] = round(group["net_buy_million"], 2) + group["seat_count"] = len(group.pop("seat_names")) + group["stock_count"] = len(group.pop("stock_codes")) + group["operation_count"] = len(group["operations"]) + group["operations"].sort( + key=lambda item: abs(float(item.get("net_buy_million") or 0)), reverse=True + ) + + operation_count = sum(item["operation_count"] for item in traders) + active_stocks = { + operation["code"] for item in traders for operation in item["operations"] + if operation["code"] + } + net_buy_total = round(sum(item["net_buy_million"] for item in traders), 2) + status = "success" if detail_rows else "partial" if top_rows else "empty" + if not detail_rows: + notices.insert( + 0, + f"当日有 {len(stock_context)} 只股票上榜,但未返回可识别的游资每日明细。" + if top_rows + else "该交易日未返回龙虎榜或游资每日明细。", + ) + return { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(trade_date), + "source": "tushare", + "status": status, + "schema_version": 3, + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "notice": ";".join(notices), + }, + "summary": { + "trader_count": len(traders), + "identity_count": len(traders), + "operation_count": operation_count, + "active_stock_count": len(active_stocks), + "seat_net_buy_million": net_buy_total, + "unclassified_count": 0, + "directory_count": len(directory), + "official_stock_count": len(stock_context), + }, + "traders": traders, + "unclassified_seats": [], + "rows": [], + } diff --git a/backend/data/providers/tushare_helpers.py b/backend/data/providers/tushare_helpers.py new file mode 100644 index 0000000..6260e9e --- /dev/null +++ b/backend/data/providers/tushare_helpers.py @@ -0,0 +1,64 @@ +from __future__ import annotations + +from datetime import time as dt_time +from typing import Any + +from backend.data.numbers import finite_number as _number + + +def _text(value: Any) -> str: + if isinstance(value, (list, tuple, set)): + return "、".join(str(item).strip() for item in value if str(item).strip()) + return str(value or "").strip() + + +def _prices_equal(left: Any, right: Any) -> bool: + if left is None or right is None: + return False + return abs(_number(left) - _number(right)) < 0.005 + + +def _value_percentile(value: float, population: list[float]) -> float: + valid = sorted(item for item in population if item >= 0) + if not valid: + return 0.0 + below = sum(item < value for item in valid) + equal = sum(item == value for item in valid) + return (below + equal * 0.5) / len(valid) + + +def _trading_session_progress(current_time: dt_time) -> float: + morning_start = dt_time(9, 30) + morning_end = dt_time(11, 30) + afternoon_start = dt_time(13, 0) + afternoon_end = dt_time(15, 0) + if current_time <= morning_start: + return 0.05 + if current_time <= morning_end: + minutes = (current_time.hour * 60 + current_time.minute) - (9 * 60 + 30) + return max(0.05, min(0.5, minutes / 240)) + if current_time < afternoon_start: + return 0.5 + if current_time <= afternoon_end: + minutes = (current_time.hour * 60 + current_time.minute) - 13 * 60 + return max(0.5, min(1.0, 0.5 + minutes / 240)) + return 1.0 + + +def _display_time(value: Any) -> str: + raw = str(value or "").replace(":", "").zfill(6) + if not raw.strip("0"): + return "--" + return f"{raw[:2]}:{raw[2:4]}:{raw[4:6]}" + + +def _realtime_market_status(current_time: dt_time) -> str: + if current_time < dt_time(9, 25): + return "pre_open" + if current_time < dt_time(9, 30): + return "auction" + if current_time <= dt_time(11, 30) or dt_time(13, 0) <= current_time <= dt_time(15, 0): + return "trading" + if current_time < dt_time(13, 0): + return "lunch_break" + return "closed" diff --git a/backend/data/providers/tushare_indices.py b/backend/data/providers/tushare_indices.py new file mode 100644 index 0000000..7087628 --- /dev/null +++ b/backend/data/providers/tushare_indices.py @@ -0,0 +1,118 @@ +from __future__ import annotations + +from datetime import datetime, timedelta +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.data.providers.tushare_transport import TushareError + + +class IndexMixin: + def market_indices(self, requested_date: str, lookback_days: int = 45) -> dict[str, Any]: + trade_date, _ = self.resolve_trade_context(requested_date) + end = datetime.strptime(trade_date, "%Y%m%d") + start_date = (end - timedelta(days=max(30, lookback_days * 2))).strftime("%Y%m%d") + index_names = { + "000001.SH": "上证指数", + "399001.SZ": "深证成指", + "399006.SZ": "创业板指", + } + indices = [] + for ts_code, name in index_names.items(): + rows = self.query( + "index_daily", + {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, + "ts_code,trade_date,close,pct_chg,vol,amount", + ) + rows.sort(key=lambda item: str(item.get("trade_date") or "")) + if not rows: + continue + latest = rows[-1] + close = _number(latest.get("close")) + close_5d = _number(rows[-6].get("close")) if len(rows) >= 6 else _number(rows[0].get("close")) + close_20d = _number(rows[-21].get("close")) if len(rows) >= 21 else _number(rows[0].get("close")) + indices.append( + { + "ts_code": ts_code, + "name": name, + "trade_date": str(latest.get("trade_date") or trade_date), + "close": close, + "pct_chg": round(_number(latest.get("pct_chg")), 3), + "return_5d": round((close / close_5d - 1) * 100, 3) if close_5d else 0, + "return_20d": round((close / close_20d - 1) * 100, 3) if close_20d else 0, + "amount_billion": round(_number(latest.get("amount")) / 100000, 2), + } + ) + if not indices: + raise TushareError(f"No index data returned for {trade_date}") + return { + "trade_date": trade_date, + "source": "tushare", + "realtime": False, + "precise": all(item["trade_date"] == trade_date for item in indices), + "indices": indices, + "aggregate": { + "average_pct_chg": round(sum(item["pct_chg"] for item in indices) / len(indices), 3), + "average_return_5d": round(sum(item["return_5d"] for item in indices) / len(indices), 3), + "average_return_20d": round(sum(item["return_20d"] for item in indices) / len(indices), 3), + }, + } + + def realtime_market_indices(self, requested_date: str) -> dict[str, Any]: + trade_date, _ = self.resolve_trade_context(requested_date) + index_names = { + "000001.SH": "上证指数", + "399001.SZ": "深证成指", + "399006.SZ": "创业板指", + } + rows = self.query("rt_idx_k", {"ts_code": ",".join(index_names)}, "") + row_map = {str(row.get("ts_code") or ""): row for row in rows} + indices = [] + for ts_code, name in index_names.items(): + row = row_map.get(ts_code) + if not row: + continue + close = _number(row.get("close")) + previous_close = _number(row.get("pre_close")) + if close <= 0 or previous_close <= 0: + continue + history = self.query( + "index_daily", + { + "ts_code": ts_code, + "start_date": (datetime.strptime(trade_date, "%Y%m%d") - timedelta(days=20)).strftime("%Y%m%d"), + "end_date": trade_date, + }, + "ts_code,trade_date,close,pct_chg", + ) + history.sort(key=lambda item: str(item.get("trade_date") or "")) + previous_closes = [ + _number(item.get("close")) for item in history + if str(item.get("trade_date") or "") < trade_date and _number(item.get("close")) > 0 + ] + close_5d = previous_closes[-5] if len(previous_closes) >= 5 else previous_closes[0] if previous_closes else previous_close + indices.append( + { + "ts_code": ts_code, + "name": str(row.get("name") or name).strip(), + "trade_date": trade_date, + "close": close, + "pct_chg": round((close / previous_close - 1) * 100, 3), + "return_5d": round((close / close_5d - 1) * 100, 3) if close_5d else 0, + "amount_billion": round(_number(row.get("amount")) / 100000000, 2), + } + ) + if len(indices) != len(index_names): + raise TushareError("Realtime index quotes are incomplete") + return { + "trade_date": trade_date, + "source": "tushare_rt_idx_k", + "realtime": True, + "precise": True, + "indices": indices, + "aggregate": { + "average_pct_chg": round(sum(item["pct_chg"] for item in indices) / len(indices), 3), + "average_return_5d": round(sum(item["return_5d"] for item in indices) / len(indices), 3), + "average_return_20d": 0, + }, + } diff --git a/backend/data/providers/tushare_industries.py b/backend/data/providers/tushare_industries.py new file mode 100644 index 0000000..c75f970 --- /dev/null +++ b/backend/data/providers/tushare_industries.py @@ -0,0 +1,616 @@ +from __future__ import annotations + +from datetime import datetime, timedelta +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.data.providers.tushare_transport import TushareError + + +class ShenwanIndustryMixin: + def sw_stock_industry(self, ts_code: str, trade_date: str) -> dict[str, Any]: + """Return the Shenwan industry active for a stock on trade_date.""" + rows = [] + for is_new in ("Y", "N"): + rows.extend( + self.query( + "index_member_all", + {"ts_code": ts_code, "is_new": is_new}, + "l1_code,l1_name,l2_code,l2_name,l3_code,l3_name," + "ts_code,name,in_date,out_date,is_new", + ) + ) + rows = _reconcile_membership_rows(rows) + matched = [row for row in rows if _membership_active_on(row, trade_date)] + if not matched: + matched = [ + row for row in rows + if row.get("is_new") == "Y" + and str(row.get("in_date") or "") <= trade_date + ] + if not matched: + raise TushareError(f"No Shenwan industry returned for {ts_code}") + row = max( + matched, + key=lambda item: ( + str(item.get("in_date") or ""), + 1 if item.get("is_new") == "Y" else 0, + str(item.get("l3_code") or item.get("l2_code") or ""), + ), + ) + return { + "l1_code": str(row.get("l1_code") or ""), + "l1_name": str(row.get("l1_name") or ""), + "l2_code": str(row.get("l2_code") or ""), + "l2_name": str(row.get("l2_name") or ""), + "l3_code": str(row.get("l3_code") or ""), + "l3_name": str(row.get("l3_name") or ""), + "in_date": str(row.get("in_date") or ""), + "out_date": str(row.get("out_date") or ""), + "is_new": str(row.get("is_new") or ""), + } + + def sw_sector_snapshot( + self, + ts_code: str, + requested_date: str, + realtime_expected: bool = False, + allow_realtime_close: bool = False, + ) -> dict[str, Any]: + """Build the single Shenwan L2 sector context used by heaven trend.""" + trade_date, previous_trade_date = self.resolve_trade_context(requested_date) + industry = self.sw_stock_industry(ts_code, trade_date) + sector_code = str(industry.get("l2_code") or "") + if not sector_code: + raise TushareError(f"Shenwan L2 code is unavailable for {ts_code}") + members = self._sw_sector_members(sector_code, trade_date) + if not members: + raise TushareError(f"No Shenwan members returned for {sector_code}") + raw_member_count = len(members) + members, excluded_members = _filter_members_by_listing( + members, + self._stock_listing_reference(), + trade_date, + ) + if not members: + raise TushareError(f"No listed Shenwan members returned for {sector_code}") + + if realtime_expected: + snapshot = self._sw_realtime_sector_snapshot( + industry, + members, + trade_date, + previous_trade_date, + finalized=False, + ) + snapshot.update({ + "raw_member_count": raw_member_count, + "excluded_member_count": len(excluded_members), + "excluded_members": excluded_members, + }) + return snapshot + + member_set = {str(item.get("ts_code") or "") for item in members} + member_names = { + str(item.get("ts_code") or ""): str(item.get("name") or "") + for item in members + } + member_rows = [ + row for row in self._load_daily(trade_date) + if str(row.get("ts_code") or "") in member_set + ] + quoted_codes = {str(row.get("ts_code") or "") for row in member_rows} + suspended_members = self._confirmed_suspended_members( + members, quoted_codes, trade_date + ) + up_count = sum(_number(row.get("pct_chg")) > 0 for row in member_rows) + down_count = sum(_number(row.get("pct_chg")) < 0 for row in member_rows) + leader = max(member_rows, key=lambda row: _number(row.get("pct_chg")), default={}) + leader_code = str(leader.get("ts_code") or "") + equal_change = ( + sum(_number(row.get("pct_chg")) for row in member_rows) / len(member_rows) + if member_rows else 0 + ) + coverage = len(member_rows) / max(len(members), 1) * 100 + explained_count = len(member_rows) + len(suspended_members) + explained_coverage = explained_count / max(len(members), 1) * 100 + coverage_issue = _sector_coverage_issue( + len(members), + len(member_rows), + explained_coverage, + explained_count, + ) + inner_precise = not coverage_issue + inner_error = coverage_issue + amount_billion = sum(_number(row.get("amount")) for row in member_rows) / 100000 + rows = self.query( + "sw_daily", + {"ts_code": sector_code, "trade_date": trade_date}, + "ts_code,trade_date,name,close,pct_change,vol,amount,pe,pb,float_mv,total_mv", + ) + daily = rows[0] if rows else {} + actual_trade_date = str(daily.get("trade_date") or "") + outer_precise = actual_trade_date == trade_date + outer_error = "" if outer_precise else ( + f"No Shenwan daily returned for {sector_code} on {trade_date}" + ) + if not outer_precise and allow_realtime_close: + try: + return self._sw_realtime_sector_snapshot( + industry, + members, + trade_date, + previous_trade_date, + finalized=True, + ) + except TushareError as exc: + outer_error = f"{outer_error}; realtime close fallback failed: {exc}" + + official_change = _number(daily.get("pct_change")) if outer_precise else None + return { + "code": sector_code, + "name": industry.get("l2_name") or daily.get("name") or sector_code, + "leader": str(leader.get("name") or member_names.get(leader_code) or "--"), + "leader_code": leader_code, + "leading_pct": round(_number(leader.get("pct_chg")), 3), + "change": round(official_change, 3) if official_change is not None else None, + "member_equal_change": round(equal_change, 3), + "turnover_rate": 0, + "up_count": up_count, + "down_count": down_count, + "flat_count": len(member_rows) - up_count - down_count, + "member_count": len(members), + "raw_member_count": raw_member_count, + "excluded_member_count": len(excluded_members), + "excluded_members": excluded_members, + "quote_count": len(member_rows), + "coverage": round(coverage, 1), + "explained_count": explained_count, + "explained_coverage": round(explained_coverage, 1), + "suspended_count": len(suspended_members), + "suspended_members": suspended_members, + "strength": round(max(0, min(100, 50 + (official_change if official_change is not None else equal_change) * 5)), 1), + "amount_billion": round(amount_billion, 2), + "count": 0, + "max_streak": 0, + "source": "tushare_sw_daily+member_daily" if outer_precise else "tushare_member_daily", + "inner_source": "tushare_member_daily", + "outer_source": "tushare_sw_daily" if outer_precise else "unavailable", + "taxonomy": "sw_l2", + "industry": industry, + "trade_date": trade_date, + "inner_trade_date": trade_date if member_rows else "", + "outer_trade_date": actual_trade_date, + "realtime": False, + "finalized": True, + "inner_precise": inner_precise, + "outer_precise": outer_precise, + "precise": inner_precise and outer_precise, + "inner_error": inner_error, + "outer_error": outer_error, + "schema_version": 6, + "methodology": "外显使用申万二级行业官方日线;内核独立使用当日成分日线宽度与等权涨跌聚合", + } + + def _sw_sector_members( + self, + sector_code: str, + trade_date: str, + ) -> list[dict[str, Any]]: + rows = [] + for is_new in ("Y", "N"): + rows.extend( + self.query( + "index_member_all", + {"l2_code": sector_code, "is_new": is_new}, + "l2_code,l2_name,ts_code,name,in_date,out_date,is_new", + ) + ) + deduped: dict[str, dict[str, Any]] = {} + for row in _reconcile_membership_rows(rows): + code = str(row.get("ts_code") or "") + if code and _membership_active_on(row, trade_date): + current = deduped.get(code) + if current is None or str(row.get("in_date") or "") > str(current.get("in_date") or ""): + deduped[code] = row + return list(deduped.values()) + + def sw_sector_members(self, sector_code: str, trade_date: str) -> list[dict[str, Any]]: + """Return constituents active in a Shenwan L2 industry on the target date.""" + return self._sw_sector_members(sector_code, trade_date) + + def _stock_listing_reference(self) -> dict[str, dict[str, Any]]: + now = datetime.now().astimezone() + with self._stock_listing_lock: + loaded_at = self._stock_listing_cache.get("loaded_at") + cached = self._stock_listing_cache.get("rows") + if ( + isinstance(loaded_at, datetime) + and isinstance(cached, dict) + and now - loaded_at < timedelta(hours=6) + ): + return cached + + rows: list[dict[str, Any]] = [] + try: + for status in ("L", "D", "P"): + rows.extend(self.query( + "stock_basic", + {"list_status": status}, + "ts_code,name,list_status,list_date,delist_date", + )) + except TushareError: + # Unknown status must remain in the denominator so a reference-data + # failure cannot silently improve coverage. + return {} + reference = { + str(row.get("ts_code") or ""): dict(row) + for row in rows + if row.get("ts_code") + } + with self._stock_listing_lock: + type(self)._stock_listing_cache = {"loaded_at": now, "rows": reference} + return reference + + def _confirmed_suspended_members( + self, + members: list[dict[str, Any]], + quoted_codes: set[str], + trade_date: str, + ) -> list[dict[str, str]]: + suspended: list[dict[str, str]] = [] + for member in members: + code = str(member.get("ts_code") or "") + if not code or code in quoted_codes: + continue + cache_key = f"{trade_date}:{code}" + with self._suspension_lock: + cached = self._suspension_cache.get(cache_key, "missing") + if cached == "missing": + try: + rows = self.query( + "suspend_d", + {"ts_code": code}, + "ts_code,suspend_date,resume_date,ann_date,suspend_reason,reason_type", + ) + except TushareError: + rows = [] + active = [ + row for row in rows + if str(row.get("suspend_date") or "") + and str(row.get("suspend_date") or "") <= trade_date + and ( + not str(row.get("resume_date") or "") + or trade_date < str(row.get("resume_date") or "") + ) + ] + row = max( + active, + key=lambda item: str(item.get("suspend_date") or ""), + default=None, + ) + cached = ({ + "ts_code": code, + "name": str(member.get("name") or code), + "suspend_date": str(row.get("suspend_date") or ""), + "resume_date": str(row.get("resume_date") or ""), + "reason": str(row.get("suspend_reason") or row.get("reason_type") or "已确认停牌"), + } if row else None) + with self._suspension_lock: + type(self)._suspension_cache[cache_key] = cached + if isinstance(cached, dict): + suspended.append(cached) + return suspended + + def _sw_realtime_sector_snapshot( + self, + industry: dict[str, Any], + members: list[dict[str, Any]], + trade_date: str, + previous_trade_date: str, + finalized: bool = False, + ) -> dict[str, Any]: + sector_code = str(industry.get("l2_code") or "") + sw_rows = self.query( + "rt_sw_k", + {"ts_code": sector_code}, + "ts_code,name,trade_time,close,pre_close,high,open,low,vol,amount,pct_change", + ) + sw_row = sw_rows[0] if sw_rows else {} + trade_time = str(sw_row.get("trade_time") or "") + quote_date = trade_time[:10].replace("-", "") + quote_clock = trade_time[11:19] if len(trade_time) >= 19 else "" + outer_precise = bool(sw_row and quote_date == trade_date) + if finalized and (not quote_clock or quote_clock < "15:00:00"): + outer_precise = False + official_change = _number(sw_row.get("pct_change")) + if not official_change: + close = _number(sw_row.get("close")) + pre_close = _number(sw_row.get("pre_close")) + official_change = (close / pre_close - 1) * 100 if close and pre_close else 0 + if not outer_precise: + official_change = None + outer_error = "" + if not sw_row: + outer_error = f"No Shenwan realtime index returned for {sector_code}" + elif quote_date != trade_date: + outer_error = f"Shenwan realtime index date is {quote_date or 'unknown'}, expected {trade_date}" + elif finalized and (not quote_clock or quote_clock < "15:00:00"): + outer_error = f"Shenwan realtime index is not a close snapshot ({trade_time})" + + valid: list[dict[str, Any]] = [] + codes: list[str] = [] + reference: dict[str, Any] = {} + inner_error = "" + try: + reference = self._load_realtime_reference(trade_date, previous_trade_date) + active_codes = { + str(row.get("ts_code") or "") + for row in reference.get("basic_rows") or [] + if row.get("ts_code") + } + codes = [ + str(row.get("ts_code") or "") + for row in members + if str(row.get("ts_code") or "") in active_codes + ] + if codes: + quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") + for row in quotes: + close = _number(row.get("close")) + previous_close = _number(row.get("pre_close")) + if close <= 0 or previous_close <= 0: + continue + valid.append({**row, "change": (close / previous_close - 1) * 100}) + else: + inner_error = f"No active Shenwan members returned for {sector_code}" + except TushareError as exc: + inner_error = str(exc) + + coverage = len(valid) / max(len(codes), 1) * 100 + valid_codes = {str(item.get("ts_code") or "") for item in valid} + suspended_members = self._confirmed_suspended_members( + members, valid_codes, trade_date + ) + explained_count = len(valid) + len(suspended_members) + explained_coverage = explained_count / max(len(codes), 1) * 100 + coverage_issue = _sector_coverage_issue( + len(codes), len(valid), explained_coverage, explained_count + ) + inner_precise = bool(codes) and not coverage_issue + if not inner_precise and not inner_error: + inner_error = coverage_issue or "申万实时有效成分为空" + up_count = sum(item["change"] > 0 for item in valid) + down_count = sum(item["change"] < 0 for item in valid) + leader = max(valid, key=lambda item: item["change"], default={}) + leader_code = str(leader.get("ts_code") or "") + member_names = { + str(item.get("ts_code") or ""): str(item.get("name") or "") + for item in members + } + equal_change = sum(item["change"] for item in valid) / len(valid) if valid else 0 + amount_billion = sum(_number(item.get("amount")) for item in valid) / 100000000 + try: + self._ensure_realtime_market_cache(trade_date) + with self._realtime_reference_lock: + market_rows = list( + (self._latest_realtime_market.get(trade_date) or {}).get("rows") or [] + ) + except TushareError as exc: + market_rows = [] + inner_precise = False + inner_error = inner_error or str(exc) + capital_map = { + str(item.get("ts_code") or ""): item + for item in reference.get("capital_rows") or [] + } + sector_turnovers = [] + for item in valid: + capital = capital_map.get(str(item.get("ts_code") or ""), {}) + float_share = _number(capital.get("float_share")) + if float_share: + sector_turnovers.append(_number(item.get("vol")) / float_share / 100) + market_turnovers = [] + for item in market_rows: + capital = capital_map.get(str(item.get("ts_code") or ""), {}) + float_share = _number(capital.get("float_share")) + if float_share: + market_turnovers.append(_number(item.get("vol")) / float_share / 100) + average_turnover = sum(sector_turnovers) / len(sector_turnovers) if sector_turnovers else 0 + market_turnover = sum(market_turnovers) / len(market_turnovers) if market_turnovers else 0 + relative_turnover = average_turnover / market_turnover if market_turnover else 0 + if not relative_turnover: + inner_precise = False + inner_error = inner_error or "Shenwan member relative turnover is unavailable" + return { + "code": sector_code, + "name": str(industry.get("l2_name") or sw_row.get("name") or ""), + "leader": str(leader.get("name") or member_names.get(leader_code) or "--").strip(), + "leader_code": leader_code, + "leading_pct": round(_number(leader.get("change")), 3), + "change": round(official_change, 3) if official_change is not None else None, + "member_equal_change": round(equal_change, 3), + "turnover_rate": round(average_turnover, 4), + "market_turnover_rate": round(market_turnover, 4), + "relative_turnover": round(relative_turnover, 4), + "up_count": up_count, + "down_count": down_count, + "flat_count": len(valid) - up_count - down_count, + "member_count": len(codes), + "quote_count": len(valid), + "coverage": round(coverage, 1), + "explained_count": explained_count, + "explained_coverage": round(explained_coverage, 1), + "suspended_count": len(suspended_members), + "suspended_members": suspended_members, + "strength": round(max(0, min(100, 50 + (official_change if official_change is not None else equal_change) * 5)), 1), + "amount_billion": round(amount_billion, 2), + "count": sum(item["change"] >= 9.5 for item in valid), + "max_streak": 0, + "source": "tushare_rt_sw_k+sw_members_rt_k", + "inner_source": "tushare_sw_members+rt_k", + "outer_source": "tushare_rt_sw_k", + "taxonomy": "sw_l2", + "industry": industry, + "trade_date": trade_date, + "inner_trade_date": trade_date if valid else "", + "outer_trade_date": quote_date, + "trade_time": trade_time, + "realtime": True, + "finalized": finalized, + "inner_precise": inner_precise, + "outer_precise": outer_precise, + "precise": inner_precise and outer_precise, + "inner_error": inner_error, + "outer_error": outer_error, + "schema_version": 6, + "methodology": "外显使用申万官方 rt_sw_k;内核独立使用申万成分 rt_k 宽度与相对换手聚合", + } + + +def _filter_members_by_listing( + members: list[dict[str, Any]], + listing_reference: dict[str, dict[str, Any]], + trade_date: str, +) -> tuple[list[dict[str, Any]], list[dict[str, str]]]: + eligible: list[dict[str, Any]] = [] + excluded: list[dict[str, str]] = [] + for member in members: + code = str(member.get("ts_code") or "") + listing = listing_reference.get(code) + if not listing: + eligible.append(member) + continue + list_date = str(listing.get("list_date") or "") + delist_date = str(listing.get("delist_date") or "") + reason = "" + effective_date = "" + if delist_date and delist_date <= trade_date: + reason = "目标日期前已退市" + effective_date = delist_date + elif list_date and list_date > trade_date: + reason = "目标日期尚未上市" + effective_date = list_date + if not reason: + eligible.append(member) + continue + excluded.append({ + "ts_code": code, + "name": str(member.get("name") or listing.get("name") or code), + "reason": reason, + "effective_date": effective_date, + }) + return eligible, excluded + + +def _sector_coverage_issue( + member_count: int, + quote_count: int, + coverage: float | None = None, + explained_count: int | None = None, +) -> str: + members = max(0, int(member_count or 0)) + quotes = max(0, min(int(quote_count or 0), members)) + if members <= 0: + if coverage is not None and float(coverage) >= 90: + return "" + if coverage is not None: + return "行业成分行情覆盖率低于90%" + return "申万有效成分为空" + explained = quotes if explained_count is None else max( + quotes, min(int(explained_count or 0), members) + ) + actual_coverage = ( + float(coverage) + if coverage is not None + else explained / members * 100 + ) + missing = members - explained + if members <= 7 and missing: + return f"小型行业有效成分状态仅确认 {explained}/{members},要求全部可解释" + if members <= 20 and (actual_coverage < 90 or missing > 1): + return f"中型行业有效成分状态仅确认 {explained}/{members},要求覆盖率至少90%且最多缺1只" + if members > 20 and actual_coverage < 90: + return f"行业有效成分状态仅确认 {explained}/{members},覆盖率低于90%" + return "" + + +def _membership_active_on(row: dict[str, Any], trade_date: str) -> bool: + start = str(row.get("in_date") or "") + end = str(row.get("out_date") or "") + return (not start or start <= trade_date) and (not end or end > trade_date) + + +def _reconcile_membership_rows(rows: list[dict[str, Any]]) -> list[dict[str, Any]]: + """Merge duplicate Y/N membership rows before evaluating their date interval.""" + reconciled: dict[tuple[str, str, str, str, str], dict[str, Any]] = {} + for raw in rows: + row = dict(raw) + key = ( + str(row.get("ts_code") or ""), + str(row.get("l1_code") or ""), + str(row.get("l2_code") or ""), + str(row.get("l3_code") or ""), + str(row.get("in_date") or ""), + ) + current = reconciled.get(key) + if current is None: + reconciled[key] = row + continue + current_end = str(current.get("out_date") or "") + candidate_end = str(row.get("out_date") or "") + if candidate_end and not current_end: + current["out_date"] = candidate_end + current["is_new"] = row.get("is_new") or current.get("is_new") + for field, value in row.items(): + if not current.get(field) and value not in (None, ""): + current[field] = value + return list(reconciled.values()) + + +def _match_sector_row(rows: list[dict[str, Any]], identifier: str) -> dict[str, Any] | None: + if not rows: + return None + target = identifier.strip().upper() + code_match = next( + (row for row in rows if str(row.get("ts_code") or "").strip().upper() == target), + None, + ) + if code_match: + return code_match + + def normalized(value: Any) -> str: + text = str(value or "").strip().replace(" ", "") + for suffix in ("板块", "概念", "行业"): + text = text.removesuffix(suffix) + aliases = { + "元器件": "元件", + "电子元器件": "元件", + } + return aliases.get(text, text) + + target_name = normalized(identifier) + exact = [row for row in rows if normalized(row.get("name")) == target_name] + if exact: + return min(exact, key=_sector_match_priority) + fuzzy = [ + row for row in rows + if target_name and ( + target_name in normalized(row.get("name")) + or normalized(row.get("name")) in target_name + ) + ] + return min( + fuzzy, + key=lambda row: (len(normalized(row.get("name"))), *_sector_match_priority(row)), + ) if fuzzy else None + + +def _sector_match_priority(row: dict[str, Any]) -> tuple[int, int, int]: + code = str(row.get("ts_code") or "") + exchange = str(row.get("exchange") or "").upper() + return ( + 0 if exchange == "A" else 1, + 0 if code.startswith("881") else 1, + 0 if _number(row.get("count")) > 0 else 1, + ) diff --git a/backend/data/providers/tushare_sectors.py b/backend/data/providers/tushare_sectors.py new file mode 100644 index 0000000..5e76d2a --- /dev/null +++ b/backend/data/providers/tushare_sectors.py @@ -0,0 +1,224 @@ +from __future__ import annotations + +import math +import re +from datetime import datetime, time as dt_time +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.data.providers.tushare_industries import _match_sector_row +from backend.data.providers.tushare_transport import TushareError + + +class SectorMixin: + def sector_snapshot( + self, + identifier: str, + requested_date: str, + realtime_expected: bool | None = None, + ) -> dict[str, Any]: + trade_date, _ = self.resolve_trade_context(requested_date) + raw_identifier = identifier.strip() + if not raw_identifier: + raise TushareError("Sector identifier is empty") + errors = [] + now = datetime.now().astimezone() + if realtime_expected is None: + realtime_expected = ( + trade_date == now.strftime("%Y%m%d") + and dt_time(9, 15) <= now.time().replace(tzinfo=None) <= dt_time(15, 5) + ) + try: + dc_params = {"trade_date": trade_date} + if re.fullmatch(r"[A-Z0-9.]+", raw_identifier.upper()) and "." in raw_identifier: + dc_params["ts_code"] = raw_identifier.upper() + else: + dc_params["name"] = raw_identifier + dc_rows = self.query( + "dc_index", + dc_params, + "ts_code,trade_date,name,leading,leading_code,pct_change,leading_pct," + "total_mv,turnover_rate,up_num,down_num", + ) + if not dc_rows and "name" in dc_params: + dc_rows = self.query( + "dc_index", + {"trade_date": trade_date}, + "ts_code,trade_date,name,leading,leading_code,pct_change,leading_pct," + "total_mv,turnover_rate,up_num,down_num", + ) + dc_row = _match_sector_row(dc_rows, raw_identifier) + if dc_row and not realtime_expected: + change = _number(dc_row.get("pct_change")) + actual_trade_date = str(dc_row.get("trade_date") or "") + return { + "code": dc_row.get("ts_code") or "", + "name": dc_row.get("name") or raw_identifier, + "leader": dc_row.get("leading") or "--", + "leader_code": dc_row.get("leading_code") or "", + "leading_pct": _number(dc_row.get("leading_pct")), + "change": change, + "turnover_rate": _number(dc_row.get("turnover_rate")), + "up_count": int(_number(dc_row.get("up_num"))), + "down_count": int(_number(dc_row.get("down_num"))), + "total_mv": _number(dc_row.get("total_mv")), + "strength": round(max(0, min(100, 50 + change * 5)), 1), + "amount_billion": 0, + "count": 0, + "max_streak": 0, + "source": "tushare_dc", + "trade_date": actual_trade_date, + "realtime": False, + "precise": actual_trade_date == trade_date, + } + except TushareError as exc: + errors.append(f"DC: {exc}") + + ts_code = raw_identifier.upper() + if re.fullmatch(r"\d{6}", ts_code): + ts_code = f"{ts_code}.TI" + try: + if re.fullmatch(r"\d{6}\.TI", ts_code): + index_rows = self.query( + "ths_index", + {"ts_code": ts_code}, + "ts_code,name,count,exchange,list_date,type", + ) + else: + index_rows = self.query( + "ths_index", + {}, + "ts_code,name,count,exchange,list_date,type", + ) + basic = _match_sector_row(index_rows, raw_identifier) + if not basic: + raise TushareError(f"No THS sector returned for {raw_identifier}") + except TushareError as exc: + errors.append(f"THS: {exc}") + raise TushareError("; ".join(errors)) from exc + actual_code = str(basic.get("ts_code") or ts_code) + if realtime_expected: + try: + realtime_sector = self._realtime_sector_snapshot(actual_code, basic, trade_date) + if realtime_sector: + return realtime_sector + except TushareError as exc: + errors.append(f"THS realtime members: {exc}") + daily_rows = self.query( + "ths_daily", + {"ts_code": actual_code, "trade_date": trade_date}, + "ts_code,trade_date,close,pct_change,vol,turnover_rate,total_mv,float_mv", + ) + daily = daily_rows[0] if daily_rows else {} + actual_trade_date = str(daily.get("trade_date") or "") + change = _number(daily.get("pct_change")) + return { + "code": actual_code, + "name": basic.get("name") or raw_identifier, + "leader": "--", + "change": change, + "leading_pct": change, + "turnover_rate": _number(daily.get("turnover_rate")), + "up_count": 0, + "down_count": 0, + "strength": round(max(0, min(100, 50 + change * 5)), 1), + "amount_billion": 0, + "count": 0, + "max_streak": 0, + "source": "tushare_ths", + "trade_date": actual_trade_date, + "realtime": False, + "precise": actual_trade_date == trade_date, + } + + def _realtime_sector_snapshot( + self, + sector_code: str, + basic: dict[str, Any], + trade_date: str, + ) -> dict[str, Any] | None: + members = self.query( + "ths_member", + {"ts_code": sector_code, "is_new": "Y"}, + "ts_code,con_code,con_name,is_new", + ) + codes = [str(row.get("con_code") or "") for row in members if row.get("con_code")] + if not codes: + return None + quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "") + valid = [] + for row in quotes: + close = _number(row.get("close")) + previous_close = _number(row.get("pre_close")) + if close <= 0 or previous_close <= 0: + continue + valid.append( + { + **row, + "change": (close / previous_close - 1) * 100, + } + ) + minimum = max(1, math.ceil(len(codes) * 0.9)) + if len(valid) < minimum: + raise TushareError( + f"Realtime sector coverage is insufficient ({len(valid)}/{len(codes)})" + ) + up_count = sum(item["change"] > 0 for item in valid) + down_count = sum(item["change"] < 0 for item in valid) + flat_count = len(valid) - up_count - down_count + leader = max(valid, key=lambda item: item["change"]) + change = sum(item["change"] for item in valid) / len(valid) + amount_billion = sum(_number(item.get("amount")) for item in valid) / 100000000 + self._ensure_realtime_market_cache(trade_date) + with self._realtime_reference_lock: + references = list(self._realtime_reference_cache.values()) + market_rows = list((self._latest_realtime_market.get(trade_date) or {}).get("rows") or []) + capital_map: dict[str, dict[str, Any]] = {} + for reference in reversed(references): + capital_map = { + str(item.get("ts_code") or ""): item + for item in reference.get("capital_rows") or [] + } + if capital_map: + break + sector_turnovers = [] + for item in valid: + capital = capital_map.get(str(item.get("ts_code") or ""), {}) + float_share = _number(capital.get("float_share")) + if float_share: + sector_turnovers.append(_number(item.get("vol")) / float_share / 100) + market_turnovers = [] + for item in market_rows: + capital = capital_map.get(str(item.get("ts_code") or ""), {}) + float_share = _number(capital.get("float_share")) + if float_share: + market_turnovers.append(_number(item.get("vol")) / float_share / 100) + average_turnover = sum(sector_turnovers) / len(sector_turnovers) if sector_turnovers else 0 + market_turnover = sum(market_turnovers) / len(market_turnovers) if market_turnovers else 0 + relative_turnover = average_turnover / market_turnover if market_turnover else 0 + return { + "code": sector_code, + "name": basic.get("name") or sector_code, + "leader": str(leader.get("name") or "--").strip(), + "leader_code": leader.get("ts_code") or "", + "leading_pct": round(leader["change"], 3), + "change": round(change, 3), + "turnover_rate": round(average_turnover, 4), + "market_turnover_rate": round(market_turnover, 4), + "relative_turnover": round(relative_turnover, 4), + "up_count": up_count, + "down_count": down_count, + "flat_count": flat_count, + "member_count": len(codes), + "quote_count": len(valid), + "coverage": round(len(valid) / len(codes) * 100, 1), + "strength": round(max(0, min(100, 50 + change * 5)), 1), + "amount_billion": round(amount_billion, 2), + "count": sum(item["change"] >= 9.5 for item in valid), + "max_streak": 0, + "source": "tushare_rt_ths_members", + "trade_date": trade_date, + "realtime": True, + "precise": True, + "methodology": "同花顺行业最新成分股的 rt_k 等权涨跌、宽度与成交额聚合", + } diff --git a/backend/data/providers/tushare_stocks.py b/backend/data/providers/tushare_stocks.py new file mode 100644 index 0000000..0d0434e --- /dev/null +++ b/backend/data/providers/tushare_stocks.py @@ -0,0 +1,137 @@ +from __future__ import annotations + +from datetime import datetime, timedelta +from typing import Any + +from backend.bootstrap.config import display_compact_date as _display_date +from backend.data.numbers import finite_number as _number + + +class StockMixin: + def stock_detail(self, ts_code: str, requested_date: str) -> dict[str, Any]: + trade_date, _ = self.resolve_trade_context(requested_date) + end = datetime.strptime(trade_date, "%Y%m%d") + start_date = (end - timedelta(days=190)).strftime("%Y%m%d") + daily = self.query( + "daily", + {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, + "ts_code,trade_date,open,high,low,close,pct_chg,vol,amount", + ) + factors = self.query( + "adj_factor", + {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, + "ts_code,trade_date,adj_factor", + ) + basics = self.query( + "stock_basic", + {"ts_code": ts_code}, + "ts_code,symbol,name,area,industry,market,list_date", + ) + daily_basics = self.query( + "daily_basic", + {"ts_code": ts_code, "trade_date": trade_date}, + "ts_code,trade_date,turnover_rate,volume_ratio,total_mv,circ_mv", + ) + moneyflow = self.query( + "moneyflow", + {"ts_code": ts_code, "trade_date": trade_date}, + "ts_code,trade_date,buy_sm_amount,sell_sm_amount,buy_md_amount,sell_md_amount," + "buy_lg_amount,sell_lg_amount,buy_elg_amount,sell_elg_amount,net_mf_amount", + ) + factor_map = {row["trade_date"]: _number(row.get("adj_factor"), 1) for row in factors} + latest_factor = max(factor_map.values(), default=1) or 1 + prices = [] + for row in sorted(daily, key=lambda item: item.get("trade_date", ""))[-90:]: + factor = factor_map.get(row.get("trade_date"), latest_factor) + ratio = factor / latest_factor + prices.append( + { + "trade_date": _display_date(str(row.get("trade_date", ""))), + "open": round(_number(row.get("open")) * ratio, 3), + "high": round(_number(row.get("high")) * ratio, 3), + "low": round(_number(row.get("low")) * ratio, 3), + "close": round(_number(row.get("close")) * ratio, 3), + "change": _number(row.get("pct_chg")), + "volume": _number(row.get("vol")), + "amount_billion": round(_number(row.get("amount")) / 100000, 2), + } + ) + flow = moneyflow[0] if moneyflow else {} + basic = basics[0] if basics else {} + daily_basic = daily_basics[0] if daily_basics else {} + latest = prices[-1] if prices else {} + actual_trade_date = max( + (str(row.get("trade_date") or "") for row in daily), + default=trade_date, + ) or trade_date + return { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(actual_trade_date), + "source": "tushare", + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "notice": "", + }, + "stock": { + "code": ts_code.split(".")[0], + "ts_code": ts_code, + "name": basic.get("name") or "--", + "industry": basic.get("industry") or "其他", + "area": basic.get("area") or "--", + "market": basic.get("market") or "--", + "list_date": _display_date(str(basic.get("list_date") or "")), + "price": latest.get("close", 0), + "change": latest.get("change", 0), + "turnover_rate": _number(daily_basic.get("turnover_rate")), + "volume_ratio": _number(daily_basic.get("volume_ratio")), + "amount_billion": latest.get("amount_billion", 0), + }, + "prices": prices, + "moneyflow": { + "net_million": round(_number(flow.get("net_mf_amount")) / 100, 2), + "large_million": round( + (_number(flow.get("buy_lg_amount")) + _number(flow.get("buy_elg_amount")) + - _number(flow.get("sell_lg_amount")) - _number(flow.get("sell_elg_amount"))) / 100, + 2, + ), + "medium_million": round( + (_number(flow.get("buy_md_amount")) - _number(flow.get("sell_md_amount"))) / 100, + 2, + ), + "small_million": round( + (_number(flow.get("buy_sm_amount")) - _number(flow.get("sell_sm_amount"))) / 100, + 2, + ), + }, + } + + def stock_intraday(self, ts_code: str, requested_date: str) -> dict[str, Any]: + trade_date, _ = self.resolve_trade_context(requested_date) + display_date = _display_date(trade_date) + rows = self.query( + "stk_mins", + { + "ts_code": ts_code, + "freq": "1min", + "start_date": f"{display_date} 09:00:00", + "end_date": f"{display_date} 15:30:00", + }, + "ts_code,trade_time,open,close,high,low,vol,amount", + ) + points = [] + for row in sorted(rows, key=lambda item: str(item.get("trade_time") or "")): + trade_time = str(row.get("trade_time") or "") + if not trade_time: + continue + points.append( + { + "time": trade_time[-8:-3] if len(trade_time) >= 8 else trade_time, + "open": round(_number(row.get("open")), 3), + "high": round(_number(row.get("high")), 3), + "low": round(_number(row.get("low")), 3), + "close": round(_number(row.get("close")), 3), + "volume": _number(row.get("vol")), + "amount": _number(row.get("amount")), + } + ) + return {"trade_date": display_date, "points": points} diff --git a/backend/data/providers/tushare_transport.py b/backend/data/providers/tushare_transport.py new file mode 100644 index 0000000..30e602e --- /dev/null +++ b/backend/data/providers/tushare_transport.py @@ -0,0 +1,48 @@ +from __future__ import annotations + +import json +import urllib.error +import urllib.request +from typing import Any + + +TUSHARE_URL = "http://api.tushare.pro" + + +class TushareError(RuntimeError): + pass + + +class TushareTransportMixin: + def query( + self, + api_name: str, + params: dict[str, Any] | None = None, + fields: str = "", + ) -> list[dict[str, Any]]: + payload = json.dumps( + { + "api_name": api_name, + "token": self.token, + "params": params or {}, + "fields": fields, + } + ).encode("utf-8") + request = urllib.request.Request( + TUSHARE_URL, + data=payload, + headers={"Content-Type": "application/json", "User-Agent": "XiaobaiReviewWeb/0.2"}, + method="POST", + ) + try: + with urllib.request.urlopen(request, timeout=self.timeout) as response: + result = json.loads(response.read().decode("utf-8")) + except (urllib.error.URLError, TimeoutError, json.JSONDecodeError) as exc: + raise TushareError(f"Tushare request failed: {exc}") from exc + + if result.get("code") != 0: + raise TushareError(result.get("msg") or "Tushare returned an unknown error") + + data = result.get("data") or {} + columns = data.get("fields") or [] + return [dict(zip(columns, item)) for item in data.get("items") or []] diff --git a/backend/features/accounts/application.py b/backend/features/accounts/application.py new file mode 100644 index 0000000..6608e6b --- /dev/null +++ b/backend/features/accounts/application.py @@ -0,0 +1,63 @@ +from __future__ import annotations + +from typing import Any + +from backend.features.accounts.service import AccountService + + +class AccountApplicationMixin: + def bind_user(self, user_id: int) -> None: + self._request_context.user_id = int(user_id) + encrypted = self.database.get_user_credentials(int(user_id)) + self._request_context.credentials = self.vault.decrypt_json(encrypted) if encrypted else {} + self._request_context.access = self.database.user_access(int(user_id)) or {} + + @property + def current_user_id(self) -> int: + user_id = getattr(self._request_context, "user_id", 0) + if not user_id: + raise ValueError("当前请求尚未绑定账号。") + return int(user_id) + + def membership(self) -> dict[str, Any]: + return self.accounts.membership() + + def admin_users(self) -> list[dict[str, Any]]: + return self.accounts.admin_users(self._platform_usage_today_for_user) + + def update_membership(self, payload: dict[str, Any]) -> None: + self.accounts.update_membership(payload) + + def register_account(self, username: str, password: str) -> dict[str, Any]: + return self.accounts.register(username, password) + + def login_account(self, username: str, password: str) -> dict[str, Any]: + return self.accounts.login(username, password) + + def change_password(self, current_password: str, new_password: str) -> None: + self.accounts.change_password(current_password, new_password) + + def create_account_session(self, user: dict[str, Any]) -> dict[str, Any]: + return self.accounts.create_session(user) + + @staticmethod + def _validate_account_input(username: str, password: str) -> None: + AccountService.validate_input(username, password) + + def save_birth_profile(self, payload: dict[str, Any]) -> dict[str, Any]: + return self.accounts.save_birth_profile(payload) + + def stored_birth_profile(self) -> dict[str, str] | None: + return self.accounts.stored_birth_profile() + + def account_personal_field( + self, + current_date: str, + current_field: dict[str, Any], + public: bool = False, + ) -> dict[str, Any] | None: + return self.accounts.personal_field(current_date, current_field, public) + + @staticmethod + def _public_personal_profile(personal: dict[str, Any]) -> dict[str, Any]: + return AccountService.public_personal_profile(personal) diff --git a/backend/features/accounts/routes.py b/backend/features/accounts/routes.py new file mode 100644 index 0000000..89af383 --- /dev/null +++ b/backend/features/accounts/routes.py @@ -0,0 +1,22 @@ +from __future__ import annotations + + +class AccountRoutesMixin: + def _handle_accounts_public_get(self, parsed) -> bool: + if parsed.path == "/api/auth/me": + self.auth_me() + return True + return False + + def _handle_accounts_get(self, parsed) -> bool: + if parsed.path == "/api/account/status": + self.send_json({"ok": True, **self.application_service.status()}) + return True + return False + + def _handle_accounts_delete(self, parsed) -> bool: + if parsed.path == "/api/account/birth-profile": + deleted = self.application_service.database.delete_user_birth_profile(self.application_service.current_user_id) + self.send_json({"ok": True, "deleted": deleted}) + return True + return False diff --git a/backend/features/alerts/routes.py b/backend/features/alerts/routes.py new file mode 100644 index 0000000..21aa2e3 --- /dev/null +++ b/backend/features/alerts/routes.py @@ -0,0 +1,47 @@ +from __future__ import annotations + +import re +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs + + +class AlertRoutesMixin: + def _handle_alerts_get(self, parsed) -> bool: + if parsed.path == "/api/alerts": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.alert_center( + query.get("status", ["all"])[0], + query.get("as_of", [date.today().isoformat()])[0], + ) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False + + def _handle_alerts_post(self, parsed) -> bool: + alert_read_match = re.fullmatch(r"/api/alerts/(\d+)/read", parsed.path) + if alert_read_match: + self.send_json( + {"ok": True, **self.application_service.mark_alert_read(int(alert_read_match.group(1)))} + ) + return True + if parsed.path == "/api/alerts/read-all": + body = self.read_json_body(True) + self.send_json( + {"ok": True, **self.application_service.mark_all_alerts_read(str(body.get("as_of") or ""))} + ) + return True + return False + + def _handle_alerts_delete(self, parsed) -> bool: + alert_match = re.fullmatch(r"/api/alerts/(\d+)", parsed.path) + if alert_match: + self.send_json( + {"ok": True, **self.application_service.delete_alert(int(alert_match.group(1)))} + ) + return True + return False diff --git a/backend/features/auction/routes.py b/backend/features/auction/routes.py new file mode 100644 index 0000000..26e6f5e --- /dev/null +++ b/backend/features/auction/routes.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs +from backend.data.providers.tushare_client import TushareError + + +class AuctionRoutesMixin: + def _handle_auction_get(self, parsed) -> bool: + if parsed.path == "/api/auction": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.auction_center( + query.get("trade_date", [date.today().isoformat()])[0], + query.get("force", ["0"])[0] == "1", + ) + ) + except (ValueError, TushareError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/features/dragon_tiger/routes.py b/backend/features/dragon_tiger/routes.py new file mode 100644 index 0000000..ae13652 --- /dev/null +++ b/backend/features/dragon_tiger/routes.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +import json +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs +from backend.bootstrap.config import validate_text + + +class DragonTigerRoutesMixin: + def _handle_dragon_tiger_get(self, parsed) -> bool: + if parsed.path == "/api/dragon-tiger": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + force = query.get("force", ["0"])[0] == "1" + try: + self.send_json(self.application_service.get_dragon_tiger(trade_date, force)) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/dragon-tiger/profiles": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.get_hot_money_profiles( + query.get("force", ["0"])[0] == "1" + ) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/seat-aliases": + self.send_json({"items": self.application_service.database.list_seat_aliases()}) + return True + return False + + def save_seat_alias(self) -> None: + try: + body = self.read_json_body() + seat_name = validate_text(body.get("seat_name"), "席位名称", 200, required=True) + alias = validate_text(body.get("alias"), "席位别名", 50, required=True) + self.application_service.database.save_seat_alias(seat_name, alias) + self.send_json({"ok": True}) + except (ValueError, json.JSONDecodeError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) diff --git a/backend/features/heaven/manual.py b/backend/features/heaven/manual.py new file mode 100644 index 0000000..bbf27ce --- /dev/null +++ b/backend/features/heaven/manual.py @@ -0,0 +1,412 @@ +from __future__ import annotations + +import copy +from typing import Any + +from backend.bootstrap.config import validate_text +from backend.data.providers.tushare_client import _sector_coverage_issue +from backend.features.heaven.engine import _market_line_scores, _score_to_line + + +class HeavenManualMixin: + @staticmethod + def _heaven_manual_schema(market_mode: str) -> dict[str, dict[str, Any]]: + intraday = market_mode == "intraday" + fields = { + "stock_amount_percentile": {"line": 1, "label": "成交额全市场分位", "unit": "%", "min": 0, "max": 100}, + "stock_turnover_rate": {"line": 1, "label": "个股换手率", "unit": "%", "min": 0, "max": 100}, + "stock_turnover_relative": {"line": 1, "label": "相对市场换手", "unit": "倍", "min": 0, "max": 20}, + "stock_volume_activity_ratio": {"line": 1, "label": "同进度量能", "unit": "倍", "min": 0, "max": 20}, + "stock_seal_amount_million": {"line": 1, "label": "封单金额", "unit": "万元", "min": 0, "max": 100000000}, + "stock_open_times": {"line": 1, "label": "开板次数", "unit": "次", "min": 0, "max": 100, "integer": True}, + "stock_change": {"line": 2, "label": "个股涨跌幅", "unit": "%", "min": -100, "max": 100}, + "stock_streak": {"line": 2, "label": "连板高度", "unit": "板", "min": 0, "max": 100, "integer": True}, + "stock_status": {"line": 2, "label": "个股状态", "type": "select", "options": ["普通", "涨停", "炸板", "跌停"]}, + "sector_name": {"line": [3, 4], "label": "申万二级行业", "type": "text", "max_length": 50}, + "sector_up_count": {"line": 3, "label": "行业上涨家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, + "sector_down_count": {"line": 3, "label": "行业下跌家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, + "sector_coverage": {"line": 3, "label": "成分行情覆盖率", "unit": "%", "min": 0, "max": 100}, + "sector_relative_turnover": {"line": 3, "label": "行业相对市场换手", "unit": "倍", "min": 0, "max": 20}, + "sector_member_equal_change": {"line": 3, "label": "成分等权涨跌幅", "unit": "%", "min": -100, "max": 100}, + "sector_change": {"line": 4, "label": "申万官方涨跌幅", "unit": "%", "min": -100, "max": 100}, + "sector_leading_pct": {"line": [3, 4], "label": "行业领涨股涨跌幅", "unit": "%", "min": -100, "max": 100}, + "market_sentiment_score": {"line": 5, "label": "市场情绪温度", "unit": "分", "min": 0, "max": 100}, + "market_seal_rate": {"line": 5, "label": "封板率", "unit": "%", "min": 0, "max": 100}, + "market_amount_billion": {"line": 5, "label": "两市成交额", "unit": "亿元", "min": 0, "max": 10000000}, + "market_recent_average_amount_billion": {"line": 5, "label": "近期平均成交额", "unit": "亿元", "min": 0, "max": 10000000}, + "market_up_count": {"line": 5, "label": "上涨家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, + "market_down_count": {"line": 5, "label": "下跌家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, + "market_limit_up_count": {"line": 5, "label": "涨停家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, + "market_limit_down_count": {"line": 5, "label": "跌停家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, + "index_sh_change": {"line": 6, "label": "上证指数涨跌幅", "unit": "%", "min": -20, "max": 20}, + "index_sz_change": {"line": 6, "label": "深证成指涨跌幅", "unit": "%", "min": -20, "max": 20}, + "index_cy_change": {"line": 6, "label": "创业板指涨跌幅", "unit": "%", "min": -20, "max": 20}, + "note": {"line": [], "label": "补录说明", "type": "text", "max_length": 200}, + } + if intraday: + for key in ("stock_seal_amount_million", "stock_open_times"): + fields.pop(key) + else: + for key in ("stock_turnover_relative", "stock_volume_activity_ratio", "sector_relative_turnover"): + fields.pop(key) + return fields + + @classmethod + def _validate_heaven_manual_data( + cls, raw: Any, market_mode: str + ) -> dict[str, Any]: + if raw in (None, ""): + return {} + if not isinstance(raw, dict): + raise ValueError("六爻补录数据格式不正确。") + schema = cls._heaven_manual_schema(market_mode) + unknown = set(raw) - set(schema) + if unknown: + raise ValueError(f"六爻补录包含未知字段:{next(iter(sorted(unknown)))}") + values: dict[str, Any] = {} + for key, value in raw.items(): + if value is None or (isinstance(value, str) and not value.strip()): + continue + spec = schema[key] + if spec.get("type") == "text": + values[key] = validate_text(value, spec["label"], int(spec["max_length"])) + continue + if spec.get("type") == "select": + text = str(value).strip() + if text not in spec["options"]: + raise ValueError(f"{spec['label']}不在允许范围内。") + values[key] = text + continue + try: + number = float(value) + except (TypeError, ValueError) as exc: + raise ValueError(f"{spec['label']}必须是数字。") from exc + if number < float(spec["min"]) or number > float(spec["max"]): + raise ValueError( + f"{spec['label']}应在 {spec['min']} 至 {spec['max']} 之间。" + ) + values[key] = int(number) if spec.get("integer") else number + return values + + @staticmethod + def _apply_heaven_manual_data( + dashboard: dict[str, Any], + index_context: dict[str, Any], + sector: dict[str, Any] | None, + stock: dict[str, Any] | None, + manual_data: dict[str, Any], + market_mode: str, + trade_date: str, + stock_code: str, + ) -> tuple[dict[str, Any], dict[str, Any], dict[str, Any], dict[str, Any]]: + dashboard = copy.deepcopy(dashboard) + index_context = copy.deepcopy(index_context or {}) + sector = copy.deepcopy(sector or {}) + stock = copy.deepcopy(stock or {}) + overview = dashboard.setdefault("overview", {}) + + stock_map = { + "stock_amount_percentile": "amount_percentile", + "stock_turnover_rate": "turnover_rate", + "stock_turnover_relative": "turnover_relative", + "stock_volume_activity_ratio": "volume_activity_ratio", + "stock_seal_amount_million": "seal_amount_million", + "stock_open_times": "open_times", + "stock_change": "change", + "stock_streak": "streak", + "stock_status": "status", + } + sector_map = { + "sector_name": "name", + "sector_up_count": "up_count", + "sector_down_count": "down_count", + "sector_coverage": "coverage", + "sector_relative_turnover": "relative_turnover", + "sector_member_equal_change": "member_equal_change", + "sector_change": "change", + "sector_leading_pct": "leading_pct", + } + overview_map = { + "market_sentiment_score": "sentiment_score", + "market_seal_rate": "seal_rate", + "market_amount_billion": "amount_billion", + "market_recent_average_amount_billion": "recent_average_amount_billion", + "market_up_count": "up_count", + "market_down_count": "down_count", + "market_limit_up_count": "limit_up_count", + "market_limit_down_count": "limit_down_count", + } + for manual_key, target in stock_map.items(): + if manual_key in manual_data: + stock[target] = manual_data[manual_key] + for manual_key, target in sector_map.items(): + if manual_key in manual_data: + sector[target] = manual_data[manual_key] + for manual_key, target in overview_map.items(): + if manual_key in manual_data: + overview[target] = manual_data[manual_key] + + if any(key.startswith("stock_") for key in manual_data): + stock.setdefault("code", stock_code) + stock.setdefault("name", stock_code or "--") + stock["_quantitative_mode"] = "intraday" if market_mode == "intraday" else "historical" + if market_mode == "intraday" and "stock_volume_activity_ratio" in manual_data: + stock["activity_source"] = "user_supplied" + if any(key.startswith("sector_") for key in manual_data): + sector["_quantitative_mode"] = "intraday" if market_mode == "intraday" else "historical" + sector.setdefault("taxonomy", "sw_l2") + + index_keys = ( + ("index_sh_change", "000001.SH", "上证指数"), + ("index_sz_change", "399001.SZ", "深证成指"), + ("index_cy_change", "399006.SZ", "创业板指"), + ) + rows = {str(row.get("ts_code") or row.get("code") or ""): dict(row) for row in index_context.get("indices") or []} + for manual_key, code, name in index_keys: + if manual_key not in manual_data: + continue + row = rows.get(code, {"ts_code": code, "name": name}) + row.update({"pct_chg": manual_data[manual_key], "trade_date": trade_date}) + rows[code] = row + ordered_rows = [rows.get(code) for _, code, _ in index_keys] + if all(ordered_rows): + index_context["indices"] = ordered_rows + changes = [float(row.get("pct_chg") or 0) for row in ordered_rows] + aggregate = dict(index_context.get("aggregate") or {}) + aggregate["average_pct_chg"] = sum(changes) / 3 + index_context["aggregate"] = aggregate + return dashboard, index_context, sector, stock + + @classmethod + def _heaven_line_checks( + cls, + trade_date: str, + dashboard: dict[str, Any], + recent_history: list[dict[str, Any]], + index_context: dict[str, Any], + sector: dict[str, Any], + stock: dict[str, Any], + market_mode: str, + manual_data: dict[str, Any], + ) -> list[dict[str, Any]]: + intraday = market_mode == "intraday" + closed = market_mode == "closed" + schema = cls._heaven_manual_schema(market_mode) + required = { + 1: (["stock_amount_percentile", "stock_turnover_relative", "stock_volume_activity_ratio"] if intraday else ["stock_amount_percentile", "stock_turnover_rate", "stock_seal_amount_million", "stock_open_times"]), + 2: ["stock_change", "stock_streak", "stock_status"], + 3: (["sector_name", "sector_up_count", "sector_down_count", "sector_coverage", "sector_relative_turnover"] if intraday else ["sector_name", "sector_up_count", "sector_down_count", "sector_coverage", "sector_member_equal_change", "sector_leading_pct"]), + 4: ["sector_name", "sector_change", "sector_leading_pct"], + 5: ["market_sentiment_score", "market_seal_rate", "market_amount_billion", "market_recent_average_amount_billion", "market_up_count", "market_down_count", "market_limit_up_count", "market_limit_down_count"], + 6: ["index_sh_change", "index_sz_change", "index_cy_change"], + } + names = { + 1: ("初爻", "个股内核", "成交活跃、换手与量能"), + 2: ("二爻", "个股外显", "涨跌、连板与状态"), + 3: ("三爻", "行业内核", "行业宽度与成交活跃"), + 4: ("四爻", "行业外显", "行业涨跌与领涨表现"), + 5: ("五爻", "市场内核", "情绪、封板、成交与市场宽度"), + 6: ("上爻", "指数外显", "三大指数当日涨跌"), + } + + index_date = str(index_context.get("trade_date") or "").replace("-", "") + index_rows = list(index_context.get("indices") or []) + index_dates = {str(row.get("trade_date") or "").replace("-", "") for row in index_rows} + index_issues = [] + if len(index_rows) < 3: + index_issues.append(f"三大指数仅取得 {len(index_rows)}/3 条行情") + elif index_date != trade_date or index_dates != {trade_date}: + actual_dates = "、".join(sorted(value for value in index_dates if value)) or "未知" + index_issues.append(f"指数实际日期为 {actual_dates},目标交易日为 {trade_date}") + elif not index_context.get("precise"): + index_issues.append("三大指数行情未通过完整性校验") + elif intraday and not index_context.get("realtime"): + index_issues.append("盘中缺少可核验的实时指数行情") + elif not intraday and (index_context.get("realtime") or str(index_context.get("source") or "") != "tushare"): + index_issues.append("收盘或历史行情不是官方指数日线") + + sector_date = str(sector.get("trade_date") or "").replace("-", "") + sector_coverage = float(sector.get("coverage") or 0) + sector_explained_count = int( + sector.get("explained_count") + if sector.get("explained_count") is not None + else sector.get("quote_count") or 0 + ) + sector_explained_coverage = float( + sector.get("explained_coverage") + if sector.get("explained_coverage") is not None + else sector_coverage + ) + sector_coverage_issue = _sector_coverage_issue( + int(sector.get("member_count") or 0), + int(sector.get("quote_count") or 0), + sector_explained_coverage, + sector_explained_count, + ) + sector_common = [] + if not sector: + sector_common.append("未取得申万二级行业归属") + elif sector.get("taxonomy") != "sw_l2": + sector_common.append("行业分类不是申万二级") + elif sector_date != trade_date: + sector_common.append("行业行情日期与目标交易日不一致") + elif intraday and not sector.get("realtime"): + sector_common.append("盘中行业行情不是申万实时行情") + elif market_mode == "historical" and sector.get("realtime"): + sector_common.append("历史行业行情不能使用实时快照") + elif closed and sector.get("realtime") and not sector.get("finalized"): + sector_common.append("收盘行业实时行情尚未形成15:00最终快照") + sector_inner = list(sector_common) + sector_outer = list(sector_common) + if not sector.get("inner_precise", sector.get("precise")): + sector_inner.append(str(sector.get("inner_error") or sector.get("error") or "行业内核数据未通过校验")) + if not sector.get("outer_precise", sector.get("precise")): + sector_outer.append(str(sector.get("outer_error") or sector.get("error") or "行业外显数据未通过校验")) + if sector and sector_coverage_issue and sector_coverage_issue not in sector_inner: + sector_inner.append(sector_coverage_issue) + if sector.get("realtime") and not sector.get("relative_turnover"): + sector_inner.append("缺少行业相对全市场换手活跃度") + + stock_date = str(stock.get("trade_date") or "").replace("-", "") + stock_common = [] + if not stock.get("code"): + stock_common.append("尚未载入有效个股") + elif stock_date != trade_date: + stock_common.append(f"个股实际日期为 {stock_date or '未知'},目标交易日为 {trade_date}") + elif not stock.get("precise"): + stock_common.append("个股行情未通过完整性校验") + elif intraday and not stock.get("realtime"): + stock_common.append("盘中个股行情不是实时行情") + elif not intraday and (stock.get("realtime") or str(stock.get("data_source") or "") != "tushare"): + stock_common.append("收盘或历史个股行情不是官方日线") + stock_inner = list(stock_common) + if intraday and stock.get("turnover_source") in {None, "", "unavailable"}: + stock_inner.append("缺少可核验的实时换手率") + if intraday and stock.get("activity_source") in {None, "", "unavailable"}: + stock_inner.append("缺少同时间进度量能基准") + + overview = dashboard.get("overview") or {} + market_key_map = { + "market_sentiment_score": "sentiment_score", "market_seal_rate": "seal_rate", + "market_amount_billion": "amount_billion", "market_recent_average_amount_billion": "recent_average_amount_billion", + "market_up_count": "up_count", "market_down_count": "down_count", + "market_limit_up_count": "limit_up_count", "market_limit_down_count": "limit_down_count", + } + market_issues = [] + for manual_key, source_key in market_key_map.items(): + if source_key == "recent_average_amount_billion": + history_values = [item.get("amount_billion") for item in recent_history[:-1] if item.get("amount_billion") is not None] + if source_key not in overview and not history_values: + market_issues.append(f"缺少{schema[manual_key]['label']}") + elif source_key not in overview or overview.get(source_key) is None: + market_issues.append(f"缺少{schema[manual_key]['label']}") + + automatic_issues = { + 1: stock_inner, 2: stock_common, 3: sector_inner, + 4: sector_outer, 5: market_issues, 6: index_issues, + } + limits = list(dashboard.get("limits") or []) + scores = _market_line_scores(dashboard, recent_history, index_context, sector, stock, limits) + + value_map: dict[str, Any] = { + "stock_amount_percentile": stock.get("amount_percentile"), + "stock_turnover_rate": stock.get("turnover_rate"), + "stock_turnover_relative": stock.get("turnover_relative"), + "stock_volume_activity_ratio": stock.get("volume_activity_ratio"), + "stock_seal_amount_million": stock.get("seal_amount_million"), + "stock_open_times": stock.get("open_times"), + "stock_change": stock.get("change"), "stock_streak": stock.get("streak"), + "stock_status": stock.get("status"), "sector_name": sector.get("name"), + "sector_up_count": sector.get("up_count"), "sector_down_count": sector.get("down_count"), + "sector_coverage": sector.get("coverage"), "sector_relative_turnover": sector.get("relative_turnover"), + "sector_member_equal_change": sector.get("member_equal_change"), + "sector_change": sector.get("change"), "sector_leading_pct": sector.get("leading_pct"), + "market_sentiment_score": overview.get("sentiment_score"), "market_seal_rate": overview.get("seal_rate"), + "market_amount_billion": overview.get("amount_billion"), + "market_recent_average_amount_billion": overview.get("recent_average_amount_billion"), + "market_up_count": overview.get("up_count"), "market_down_count": overview.get("down_count"), + "market_limit_up_count": overview.get("limit_up_count"), "market_limit_down_count": overview.get("limit_down_count"), + } + history_values = [float(item.get("amount_billion")) for item in recent_history[:-1] if item.get("amount_billion") is not None] + if value_map["market_recent_average_amount_billion"] is None and history_values: + value_map["market_recent_average_amount_billion"] = sum(history_values) / len(history_values) + if value_map["stock_amount_percentile"] is None and not intraday: + amount = float(stock.get("amount_billion") or 0) + amounts = [float(item.get("amount_billion") or 0) for item in limits if item.get("amount_billion") is not None] + value_map["stock_amount_percentile"] = ( + sum(item <= amount for item in amounts) / len(amounts) * 100 if amounts else None + ) + row_by_code = {str(row.get("ts_code") or row.get("code") or ""): row for row in index_context.get("indices") or []} + value_map.update({ + "index_sh_change": (row_by_code.get("000001.SH") or {}).get("pct_chg"), + "index_sz_change": (row_by_code.get("399001.SZ") or {}).get("pct_chg"), + "index_cy_change": (row_by_code.get("399006.SZ") or {}).get("pct_chg"), + }) + + def missing_value(key: str) -> bool: + value = value_map.get(key) + return value is None or (isinstance(value, str) and not value.strip()) + + invalid_fields = { + line_number: {key for key in keys if missing_value(key)} + for line_number, keys in required.items() + } + if stock_common: + invalid_fields[1].update(required[1]) + invalid_fields[2].update(required[2]) + else: + if intraday and stock.get("turnover_source") in {None, "", "unavailable"}: + invalid_fields[1].add("stock_turnover_relative") + if intraday and stock.get("activity_source") in {None, "", "unavailable"}: + invalid_fields[1].add("stock_volume_activity_ratio") + + if sector_common: + invalid_fields[3].update(required[3]) + invalid_fields[4].update(required[4]) + else: + if not sector.get("inner_precise", sector.get("precise")) or sector_coverage_issue: + invalid_fields[3].update(key for key in required[3] if key != "sector_name") + if sector.get("realtime") and not sector.get("relative_turnover"): + invalid_fields[3].add("sector_relative_turnover") + # The official SW index supplies only the sector's external change. A valid + # membership name and member-stock leader remain usable when that quote fails. + if not sector.get("outer_precise", sector.get("precise")): + invalid_fields[4].add("sector_change") + + if index_issues: + invalid_fields[6].update(required[6]) + + checks = [] + for line_number in range(1, 7): + manual_keys = [key for key in required[line_number] if key in manual_data] + unresolved_fields = [ + key for key in required[line_number] + if key in invalid_fields[line_number] and key not in manual_data + ] + hard_missing_identity = line_number in {1, 2} and not stock.get("code") + passed = not hard_missing_identity and not unresolved_fields + status = "manual" if passed and manual_keys else "passed" if passed else "failed" + reasons = [] if passed else [ + *( ["请先输入并载入股票代码或名称"] if hard_missing_identity else automatic_issues[line_number] ), + *( ["需补充:" + "、".join(schema[key]["label"] for key in unresolved_fields)] if unresolved_fields else [] ), + ] + score = float(scores[line_number - 1]["score"]) + position, layer, formula = names[line_number] + checks.append({ + "line": line_number, "position": position, "layer": layer, "formula": formula, + "status": status, "passed": passed, "reasons": reasons, + "score": round(score, 3) if passed else None, + "line_value": _score_to_line(score) if passed else None, + "evidence": scores[line_number - 1]["evidence"] if passed else [], + "fields": [ + { + "key": key, "label": schema[key]["label"], "unit": schema[key].get("unit", ""), + "type": schema[key].get("type", "number"), "options": schema[key].get("options", []), + "value": value_map.get(key), "manual": key in manual_data, + "required": True, "min": schema[key].get("min"), "max": schema[key].get("max"), + "integer": bool(schema[key].get("integer")), + } + for key in required[line_number] + ], + }) + return checks diff --git a/backend/features/heaven/market_context.py b/backend/features/heaven/market_context.py new file mode 100644 index 0000000..a18c47b --- /dev/null +++ b/backend/features/heaven/market_context.py @@ -0,0 +1,338 @@ +from __future__ import annotations + +import re +from datetime import datetime, timedelta +from typing import Any + +from backend.bootstrap.config import ( + normalize_date, + tushare_code, + validate_stock_code, + validate_text, +) +from backend.data.providers.tushare_client import TushareError + + +class HeavenMarketContextMixin: + def _resolve_heaven_stock_code(self, query: str) -> str: + raw = validate_text(query, "股票代码或名称", 30, required=True) + code_match = re.fullmatch(r"(\d{6})(?:\.(?:SH|SZ|BJ))?", raw.upper()) + if code_match: + return validate_stock_code(code_match.group(1)) + + candidates = self.database.search_stock_master(raw) + exact = [item for item in candidates if str(item.get("name") or "").casefold() == raw.casefold()] + if not exact and self.configured: + try: + rows = self._tushare_client().query( + "stock_basic", + {"name": raw, "list_status": "L"}, + "ts_code,symbol,name,industry,market,list_date", + ) + except TushareError: + rows = [] + if rows: + self.database.upsert_stock_master(rows) + candidates = self.database.search_stock_master(raw) + exact = [ + item + for item in candidates + if str(item.get("name") or "").casefold() == raw.casefold() + ] + + matches = exact or candidates + if len(matches) == 1: + return validate_stock_code(str(matches[0].get("code") or "")) + if len(matches) > 1: + choices = "、".join( + f"{item.get('name') or '--'}({item.get('code') or '--'})" + for item in matches[:5] + ) + raise ValueError(f"匹配到多只股票:{choices}。请输入六位股票代码。") + raise ValueError(f"未找到股票“{raw}”,请检查名称或输入六位股票代码。") + + def _heaven_stock_context( + self, + stock_code: str, + trade_date: str, + dashboard: dict[str, Any], + market_mode: str, + ) -> dict[str, Any]: + """Return the only stock contract accepted by heaven trend.""" + pool_row = next( + ( + dict(row) for key in ("limits", "broken", "down_limits") + for row in dashboard.get(key) or [] + if str(row.get("code") or "") == stock_code + ), + {}, + ) + if market_mode == "intraday": + if self.configured: + try: + quote = self._tushare_client().realtime_stock_quote( + tushare_code(stock_code), + trade_date, + ) + return { + **quote, + "status": pool_row.get("status") or "普通", + "seal_amount_million": pool_row.get("seal_amount_million") or 0, + "open_times": pool_row.get("open_times") or 0, + "streak": pool_row.get("streak") or 0, + "precise": True, + } + except TushareError: + pass + if pool_row: + return { + **pool_row, + "data_source": "dashboard_rt" if dashboard.get("meta", {}).get("realtime") else "dashboard", + "trade_date": trade_date, + "realtime": bool(dashboard.get("meta", {}).get("realtime")), + "precise": False, + } + return { + "code": stock_code, + "name": "--", + "sector": "其他", + "trade_date": trade_date, + "realtime": False, + "precise": False, + } + + detail = self.get_stock_detail(stock_code, trade_date, force=True) + detail_meta = detail.get("meta") or {} + stock = detail.get("stock") or {} + resolved_date = normalize_date(str(detail_meta.get("trade_date") or trade_date)) + source = str(detail_meta.get("source") or "") + return { + "code": stock_code, + "name": stock.get("name") or pool_row.get("name") or "--", + "sector": stock.get("industry") or pool_row.get("sector") or "其他", + "status": pool_row.get("status") or "普通", + "change": stock.get("change") or 0, + "turnover_rate": stock.get("turnover_rate") or 0, + "amount_billion": stock.get("amount_billion") or 0, + "seal_amount_million": pool_row.get("seal_amount_million") or 0, + "open_times": pool_row.get("open_times") or 0, + "streak": pool_row.get("streak") or 0, + "data_source": source, + "trade_date": resolved_date, + "realtime": False, + "precise": source == "tushare" and resolved_date == trade_date, + } + + def _heaven_index_context( + self, + trade_date: str, + dashboard: dict[str, Any], + market_mode: str = "historical", + ) -> dict[str, Any]: + cached = self.database.get_data_snapshot("heaven_indices", trade_date) + cached_valid = False + if cached: + cached_rows = list(cached.get("indices") or []) + cached_dates = { + str(row.get("trade_date") or "").replace("-", "") + for row in cached_rows + } + cached_valid = ( + len(cached_rows) == 3 + and cached_dates == {trade_date} + and bool(cached.get("precise")) + and not cached.get("realtime") + and str(cached.get("source") or "") == "tushare" + and int(cached.get("schema_version") or 0) >= 3 + ) + if market_mode != "intraday" and cached_valid: + return cached + + if not self.configured: + error = "Tushare Token 未配置" + else: + try: + client = self._tushare_client() + if market_mode == "intraday": + payload = self._aggregate_index_context(trade_date) + payload["schema_version"] = 3 + return payload + payload = client.market_indices(trade_date) + payload["schema_version"] = 3 + if market_mode == "closed": + payload["finalized"] = True + self.database.save_data_snapshot( + "heaven_indices", + trade_date, + str(payload.get("source") or "tushare"), + payload, + ) + return payload + except Exception as exc: + error = str(exc) + overview = dashboard.get("overview") or {} + up_count = float(overview.get("up_count") or 0) + down_count = float(overview.get("down_count") or 0) + breadth = (up_count - down_count) / max(up_count + down_count, 1) + return { + "source": "market_breadth_proxy", + "trade_date": trade_date, + "realtime": False, + "precise": False, + "schema_version": 3, + "notice": f"指数数据不可用,当前以市场宽度代理:{error}", + "indices": [], + "aggregate": { + "average_pct_chg": round(breadth * 2.5, 3), + "average_return_5d": 0, + "average_return_20d": 0, + }, + } + + def _aggregate_index_context( + self, + trade_date: str, + tushare_error: str = "", + ) -> dict[str, Any]: + quotes = self.realtime_aggregator.tencent_indices() + epochs = [int(item.get("quote_time_epoch") or 0) for item in quotes] + quote_dates = { + datetime.fromtimestamp(epoch).astimezone().strftime("%Y%m%d") + for epoch in epochs if epoch + } + if len(quotes) != 3 or quote_dates != {trade_date}: + raise ValueError("腾讯三大指数日期与目标交易日不一致") + now = datetime.now().astimezone() + max_skew = 120 if now.hour >= 15 else 15 + if max(epochs) - min(epochs) > max_skew: + raise ValueError(f"腾讯三大指数时间差超过{max_skew}秒") + + code_map = { + "000001": "000001.SH", + "399001": "399001.SZ", + "399006": "399006.SZ", + } + client = self._tushare_client() + indices = [] + start_date = ( + datetime.strptime(trade_date, "%Y%m%d") - timedelta(days=20) + ).strftime("%Y%m%d") + for quote in quotes: + ts_code = code_map[str(quote.get("code") or "")] + history = client.query( + "index_daily", + {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, + "ts_code,trade_date,close,pct_chg", + ) + history.sort(key=lambda item: str(item.get("trade_date") or "")) + completed_closes = [ + float(item.get("close") or 0) + for item in history + if str(item.get("trade_date") or "") < trade_date + and float(item.get("close") or 0) > 0 + ] + close_5d = ( + completed_closes[-5] + if len(completed_closes) >= 5 + else completed_closes[0] if completed_closes else 0 + ) + close = float(quote.get("price") or 0) + indices.append( + { + "ts_code": ts_code, + "name": quote.get("name") or ts_code, + "trade_date": trade_date, + "close": close, + "pct_chg": round(float(quote.get("change") or 0), 3), + "return_5d": round((close / close_5d - 1) * 100, 3) if close_5d else 0, + "return_20d": 0, + "amount_billion": float(quote.get("amount_billion") or 0), + "quote_time": quote.get("quote_time") or "", + } + ) + return { + "trade_date": trade_date, + "source": "+".join( + sorted({str(item.get("source") or "web_quote") for item in quotes}) + + ["tushare_index_daily"] + ), + "realtime": True, + "precise": True, + "indices": indices, + "aggregate": { + "average_pct_chg": round( + sum(item["pct_chg"] for item in indices) / len(indices), 3 + ), + "average_return_5d": round( + sum(item["return_5d"] for item in indices) / len(indices), 3 + ), + "average_return_20d": 0, + }, + "quote_time_skew_seconds": max(epochs) - min(epochs), + "notice": ( + "指数实时行情来自腾讯行情,5日趋势来自Tushare历史指数。" + + (f" Tushare实时指数未使用:{tushare_error}" if tushare_error else "") + ), + } + + def _heaven_sector_context( + self, + identifier: str, + trade_date: str, + market_mode: str = "historical", + ) -> dict[str, Any] | None: + """Return the Shenwan L2 sector context for heaven trend. + + 观势行业层只使用申万二级行业。外显盘中使用 rt_sw_k、历史使用 + sw_daily;内核独立使用目标日期成分股行情聚合。收盘过渡期在 + sw_daily 入库前接受同日15:00后的 rt_sw_k 收盘快照。 + """ + cache_key = f"{trade_date}:{identifier.strip().lower()}" + cached = self.database.get_data_snapshot("heaven_sector", cache_key) + cached_date = str((cached or {}).get("trade_date") or "").replace("-", "") + cached_valid = bool( + cached + and cached_date == trade_date + and cached.get("taxonomy") == "sw_l2" + and cached.get("inner_precise", cached.get("precise")) + and cached.get("outer_precise", cached.get("precise")) + and not cached.get("realtime") + and int(cached.get("schema_version") or 0) >= 6 + ) + if market_mode != "intraday" and cached_valid: + return cached + if not self.configured: + return None + try: + payload = self._tushare_client().sw_sector_snapshot( + tushare_code(identifier), + trade_date, + realtime_expected=market_mode == "intraday", + allow_realtime_close=market_mode == "closed", + ) + except TushareError as exc: + if cached_valid: + return cached + return { + "name": "", + "code": "", + "taxonomy": "sw_l2", + "source": "tushare", + "trade_date": trade_date, + "realtime": market_mode == "intraday", + "precise": False, + "inner_precise": False, + "outer_precise": False, + "coverage": 0, + "member_count": 0, + "quote_count": 0, + "error": f"申万二级行业数据获取失败:{exc}", + } + if not payload.get("realtime") and payload.get("precise"): + self.database.save_data_snapshot( + "heaven_sector", + cache_key, + str(payload.get("source") or "tushare"), + payload, + ) + return payload diff --git a/backend/features/heaven/readings.py b/backend/features/heaven/readings.py new file mode 100644 index 0000000..dbf5955 --- /dev/null +++ b/backend/features/heaven/readings.py @@ -0,0 +1,220 @@ +from __future__ import annotations + +import json +import secrets +from datetime import date +from typing import Any + +from backend.bootstrap.config import normalize_date +from backend.features.heaven.agent import HeavenAgentError, interpret_heaven +from backend.features.heaven.engine import ( + build_five_phase_field, + hexagram_from_lines, +) +from backend.features.market import MarketServiceMixin + + +class HeavenReadingMixin: + def heaven_personal(self, payload: dict[str, Any]) -> dict[str, Any]: + trade_date = normalize_date(str(payload.get("trade_date") or date.today().isoformat())) + field = build_five_phase_field( + trade_date, + self.database.list_sector_phase_overrides(), + ) + personal = self.account_personal_field(trade_date, field, public=True) + if not personal: + raise ValueError("请先在账号设置中保存个人命理资料。") + return personal + + def heaven_hexagram(self, raw_lines: Any) -> dict[str, Any]: + if not isinstance(raw_lines, list): + raise ValueError("六爻起卦结果格式不正确。") + try: + lines = [int(value) for value in raw_lines] + except (TypeError, ValueError) as exc: + raise ValueError("六爻必须由六、七、八、九组成。") from exc + return hexagram_from_lines(lines) + + def heaven_readings( + self, mode: str, context_date: str = "", limit: int = 100 + ) -> dict[str, Any]: + mode = str(mode or "").strip() + if mode not in {"trend", "fortune", "heart"}: + raise ValueError("解读记录类型不正确。") + normalized_date = normalize_date(context_date) if context_date else "" + return { + "mode": mode, + "items": self.database.list_heaven_readings( + self.current_user_id, mode, normalized_date, limit + ), + } + + @staticmethod + def _heaven_reading_identity( + mode: str, context_date: str, context: dict[str, Any] + ) -> tuple[str, str]: + display_date = MarketServiceMixin._display_compact_date(context_date) + if mode == "trend": + stock = (context.get("selected_focus") or {}).get("stock") or {} + code = str(stock.get("code") or "").strip() + name = str(stock.get("name") or "").strip() + hexagram = context.get("hexagram") or {} + transformed = hexagram.get("transformed") or {} + subject = " ".join(item for item in (code, name) if item) or "观势" + detail = f"{display_date} · {hexagram.get('name') or '--'} → {transformed.get('name') or '--'}" + return subject, detail + if mode == "fortune": + field = context.get("five_phase_field") or {} + pillars = field.get("pillars") or {} + dominant = (field.get("balance") or [{}])[0] + subject = f"{display_date} 观气" + detail = ( + f"{pillars.get('year') or '--'}年 · {pillars.get('month') or '--'}月 · " + f"{pillars.get('day') or '--'}日 · {dominant.get('element') or '--'}气偏显" + ) + return subject, detail + hexagram = context.get("hexagram") or {} + transformed = hexagram.get("transformed") or {} + return ( + f"{display_date} 观心", + f"{hexagram.get('name') or '--'} → {transformed.get('name') or '--'}", + ) + + def heaven_interpret(self, payload: dict[str, Any]) -> dict[str, Any]: + mode = str(payload.get("mode") or "").strip() + if mode not in {"trend", "fortune", "heart"}: + raise ValueError("问天解读模式不正确。") + trade_date = normalize_date(str(payload.get("trade_date") or date.today().isoformat())) + if mode == "fortune": + existing = self.database.latest_heaven_reading( + self.current_user_id, "fortune", trade_date + ) + if self._legacy_truncated_heaven_reading(existing): + self.database.delete_heaven_reading( + self.current_user_id, int(existing["id"]) + ) + existing = None + if existing: + return { + "answer": existing["answer"], + "mode": mode, + "compiler": "stored", + "notice": "", + "reading": existing, + "reused": True, + } + if mode in {"trend", "fortune"}: + setup = self.heaven_setup( + trade_date, + str(payload.get("sector") or ""), + str(payload.get("stock_code") or ""), + payload.get("manual_data"), + ) + if mode == "trend": + chart = setup["chart"] + if not chart.get("available"): + issues = ";".join((chart.get("quality") or {}).get("issues") or []) + raise ValueError(f"观势数据未通过六爻校验,暂不解势:{issues}") + hexagram_context = json.loads(json.dumps(chart["hexagram"], ensure_ascii=False)) + for line in hexagram_context.get("lines", []): + line.pop("evidence", None) + line.pop("score", None) + line.pop("talent", None) + line.pop("layer", None) + line.pop("role", None) + if not line.get("moving"): + line.pop("text", None) + line.pop("image", None) + line.pop("line_name", None) + context = { + "data_trade_date": setup["trade_date"], + "selected_focus": { + "sector": chart.get("sector") or "", + "stock": chart.get("stock") or {}, + }, + "hexagram": hexagram_context, + "movement": chart.get("movement") or {}, + } + else: + personal_profile = self.account_personal_field( + setup["calendar_date"], + setup["field"], + public=False, + ) + fortune_field = json.loads(json.dumps(setup["field"], ensure_ascii=False)) + catalog = fortune_field.pop("sector_catalog", []) + dominant_elements = { + item.get("element") for item in fortune_field.get("balance", [])[:2] + } + fortune_field["industry_affinity"] = [ + { + "element": group.get("element"), + "examples": [ + item.get("name") + for item in group.get("industries", [])[:8] + if item.get("name") + ], + } + for group in catalog + if group.get("element") in dominant_elements + ] + context = { + "calendar_date": setup["calendar_date"], + "five_phase_field": fortune_field, + "personal_profile": personal_profile, + } + context_date = setup["calendar_date"] + if mode == "trend": + context_date = setup["trade_date"] + else: + context = { + "hexagram": self.heaven_hexagram(payload.get("lines")), + "ritual": "用户已完成30秒静心、六次三枚铜钱起卦,并在心中察看第一念。问题未输入。", + } + context_date = trade_date + result, compiler = self._call_heaven_agent(mode, context) + subject, subject_detail = self._heaven_reading_identity( + mode, context_date, context + ) + dedupe_key = ( + f"fortune:{context_date}" + if mode == "fortune" + else f"{mode}:{context_date}:{secrets.token_urlsafe(12)}" + ) + reading = self.database.save_heaven_reading( + self.current_user_id, + mode, + context_date, + subject, + subject_detail, + str(result.get("answer") or ""), + context, + dedupe_key, + ) + return { + **result, + "mode": mode, + "compiler": compiler, + "notice": "智能解读已自动切换可用服务。" if compiler == "fallback" else "", + "reading": reading, + "reused": False, + } + + @staticmethod + def _legacy_truncated_heaven_reading(reading: dict[str, Any] | None) -> bool: + return bool(reading and str(reading.get("answer") or "").rstrip().endswith("……")) + + def _call_heaven_agent(self, mode: str, context: dict[str, Any]) -> tuple[dict[str, Any], str]: + result = self.llm_gateway.call( + f"heaven_{mode}", + f"heaven-{mode}-v1", + lambda profile: interpret_heaven( + mode, + context, + profile.api_key, + profile.base_url, + profile.model, + ), + (HeavenAgentError,), + ) + return result.value, result.role diff --git a/backend/features/heaven/routes.py b/backend/features/heaven/routes.py new file mode 100644 index 0000000..5ceb2c7 --- /dev/null +++ b/backend/features/heaven/routes.py @@ -0,0 +1,79 @@ +from __future__ import annotations + +import json +import re +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs, unquote +from backend.bootstrap.config import validate_text + + +class HeavenRoutesMixin: + def _handle_heaven_get(self, parsed) -> bool: + if parsed.path == "/api/heaven/readings": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.heaven_readings( + query.get("mode", [""])[0], + query.get("context_date", [""])[0], + int(query.get("limit", ["100"])[0]), + ) + ) + except (TypeError, ValueError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/heaven/setup": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + sector_name = query.get("sector", [""])[0] + stock_code = query.get("stock_code", [""])[0] + manual_data = None + manual_text = query.get("manual_data", [""])[0] + if manual_text: + try: + manual_data = json.loads(manual_text) + except json.JSONDecodeError: + self.send_json({"error": "六爻补录数据格式不正确。"}, HTTPStatus.BAD_REQUEST) + return True + try: + self.send_json( + self.application_service.heaven_setup( + trade_date, + sector_name, + stock_code, + manual_data, + ) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False + + def _handle_heaven_delete(self, parsed) -> bool: + heaven_reading_match = re.fullmatch(r"/api/heaven/readings/(\d+)", parsed.path) + if heaven_reading_match: + deleted = self.application_service.database.delete_heaven_reading( + self.application_service.current_user_id, int(heaven_reading_match.group(1)) + ) + self.send_json({"ok": True, "deleted": deleted}) + return True + sector_phase_match = re.fullmatch(r"/api/heaven/sector-phases/(.+)", parsed.path) + if sector_phase_match: + name = unquote(sector_phase_match.group(1)).strip() + deleted = self.application_service.database.delete_sector_phase_override(name) + self.send_json({"ok": True, "deleted": deleted}) + return True + return False + + def save_sector_phase_override(self) -> None: + try: + body = self.read_json_body() + name = validate_text(body.get("name"), "行业或题材名称", 50, required=True) + element = str(body.get("element") or "").strip() + if element not in {"木", "火", "土", "金", "水"}: + raise ValueError("五行归类必须是木、火、土、金或水。") + self.application_service.database.save_sector_phase_override(name, element) + self.send_json({"ok": True}) + except (ValueError, json.JSONDecodeError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) diff --git a/backend/features/heaven/service.py b/backend/features/heaven/service.py index 9b00856..55803d9 100644 --- a/backend/features/heaven/service.py +++ b/backend/features/heaven/service.py @@ -1,1304 +1,15 @@ from __future__ import annotations -import copy -import json -import re -import secrets -from datetime import date, datetime, timedelta -from typing import Any - -from backend.bootstrap.config import ( - normalize_date, - tushare_code, - validate_stock_code, - validate_text, -) -from backend.data.providers.tushare_client import TushareError, _sector_coverage_issue -from backend.features.heaven.agent import HeavenAgentError, interpret_heaven -from backend.features.heaven.engine import ( - _market_line_scores, - _score_to_line, - build_five_phase_field, - build_market_hexagram, - hexagram_from_lines, -) -from backend.features.market import MarketServiceMixin +from backend.features.heaven.manual import HeavenManualMixin +from backend.features.heaven.market_context import HeavenMarketContextMixin +from backend.features.heaven.readings import HeavenReadingMixin +from backend.features.heaven.trend import HeavenTrendMixin -class HeavenServiceMixin: - @staticmethod - def _heaven_manual_schema(market_mode: str) -> dict[str, dict[str, Any]]: - intraday = market_mode == "intraday" - fields = { - "stock_amount_percentile": {"line": 1, "label": "成交额全市场分位", "unit": "%", "min": 0, "max": 100}, - "stock_turnover_rate": {"line": 1, "label": "个股换手率", "unit": "%", "min": 0, "max": 100}, - "stock_turnover_relative": {"line": 1, "label": "相对市场换手", "unit": "倍", "min": 0, "max": 20}, - "stock_volume_activity_ratio": {"line": 1, "label": "同进度量能", "unit": "倍", "min": 0, "max": 20}, - "stock_seal_amount_million": {"line": 1, "label": "封单金额", "unit": "万元", "min": 0, "max": 100000000}, - "stock_open_times": {"line": 1, "label": "开板次数", "unit": "次", "min": 0, "max": 100, "integer": True}, - "stock_change": {"line": 2, "label": "个股涨跌幅", "unit": "%", "min": -100, "max": 100}, - "stock_streak": {"line": 2, "label": "连板高度", "unit": "板", "min": 0, "max": 100, "integer": True}, - "stock_status": {"line": 2, "label": "个股状态", "type": "select", "options": ["普通", "涨停", "炸板", "跌停"]}, - "sector_name": {"line": [3, 4], "label": "申万二级行业", "type": "text", "max_length": 50}, - "sector_up_count": {"line": 3, "label": "行业上涨家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, - "sector_down_count": {"line": 3, "label": "行业下跌家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, - "sector_coverage": {"line": 3, "label": "成分行情覆盖率", "unit": "%", "min": 0, "max": 100}, - "sector_relative_turnover": {"line": 3, "label": "行业相对市场换手", "unit": "倍", "min": 0, "max": 20}, - "sector_member_equal_change": {"line": 3, "label": "成分等权涨跌幅", "unit": "%", "min": -100, "max": 100}, - "sector_change": {"line": 4, "label": "申万官方涨跌幅", "unit": "%", "min": -100, "max": 100}, - "sector_leading_pct": {"line": [3, 4], "label": "行业领涨股涨跌幅", "unit": "%", "min": -100, "max": 100}, - "market_sentiment_score": {"line": 5, "label": "市场情绪温度", "unit": "分", "min": 0, "max": 100}, - "market_seal_rate": {"line": 5, "label": "封板率", "unit": "%", "min": 0, "max": 100}, - "market_amount_billion": {"line": 5, "label": "两市成交额", "unit": "亿元", "min": 0, "max": 10000000}, - "market_recent_average_amount_billion": {"line": 5, "label": "近期平均成交额", "unit": "亿元", "min": 0, "max": 10000000}, - "market_up_count": {"line": 5, "label": "上涨家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, - "market_down_count": {"line": 5, "label": "下跌家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, - "market_limit_up_count": {"line": 5, "label": "涨停家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, - "market_limit_down_count": {"line": 5, "label": "跌停家数", "unit": "家", "min": 0, "max": 10000, "integer": True}, - "index_sh_change": {"line": 6, "label": "上证指数涨跌幅", "unit": "%", "min": -20, "max": 20}, - "index_sz_change": {"line": 6, "label": "深证成指涨跌幅", "unit": "%", "min": -20, "max": 20}, - "index_cy_change": {"line": 6, "label": "创业板指涨跌幅", "unit": "%", "min": -20, "max": 20}, - "note": {"line": [], "label": "补录说明", "type": "text", "max_length": 200}, - } - if intraday: - for key in ("stock_seal_amount_million", "stock_open_times"): - fields.pop(key) - else: - for key in ("stock_turnover_relative", "stock_volume_activity_ratio", "sector_relative_turnover"): - fields.pop(key) - return fields - - @classmethod - def _validate_heaven_manual_data( - cls, raw: Any, market_mode: str - ) -> dict[str, Any]: - if raw in (None, ""): - return {} - if not isinstance(raw, dict): - raise ValueError("六爻补录数据格式不正确。") - schema = cls._heaven_manual_schema(market_mode) - unknown = set(raw) - set(schema) - if unknown: - raise ValueError(f"六爻补录包含未知字段:{next(iter(sorted(unknown)))}") - values: dict[str, Any] = {} - for key, value in raw.items(): - if value is None or (isinstance(value, str) and not value.strip()): - continue - spec = schema[key] - if spec.get("type") == "text": - values[key] = validate_text(value, spec["label"], int(spec["max_length"])) - continue - if spec.get("type") == "select": - text = str(value).strip() - if text not in spec["options"]: - raise ValueError(f"{spec['label']}不在允许范围内。") - values[key] = text - continue - try: - number = float(value) - except (TypeError, ValueError) as exc: - raise ValueError(f"{spec['label']}必须是数字。") from exc - if number < float(spec["min"]) or number > float(spec["max"]): - raise ValueError( - f"{spec['label']}应在 {spec['min']} 至 {spec['max']} 之间。" - ) - values[key] = int(number) if spec.get("integer") else number - return values - - @staticmethod - def _apply_heaven_manual_data( - dashboard: dict[str, Any], - index_context: dict[str, Any], - sector: dict[str, Any] | None, - stock: dict[str, Any] | None, - manual_data: dict[str, Any], - market_mode: str, - trade_date: str, - stock_code: str, - ) -> tuple[dict[str, Any], dict[str, Any], dict[str, Any], dict[str, Any]]: - dashboard = copy.deepcopy(dashboard) - index_context = copy.deepcopy(index_context or {}) - sector = copy.deepcopy(sector or {}) - stock = copy.deepcopy(stock or {}) - overview = dashboard.setdefault("overview", {}) - - stock_map = { - "stock_amount_percentile": "amount_percentile", - "stock_turnover_rate": "turnover_rate", - "stock_turnover_relative": "turnover_relative", - "stock_volume_activity_ratio": "volume_activity_ratio", - "stock_seal_amount_million": "seal_amount_million", - "stock_open_times": "open_times", - "stock_change": "change", - "stock_streak": "streak", - "stock_status": "status", - } - sector_map = { - "sector_name": "name", - "sector_up_count": "up_count", - "sector_down_count": "down_count", - "sector_coverage": "coverage", - "sector_relative_turnover": "relative_turnover", - "sector_member_equal_change": "member_equal_change", - "sector_change": "change", - "sector_leading_pct": "leading_pct", - } - overview_map = { - "market_sentiment_score": "sentiment_score", - "market_seal_rate": "seal_rate", - "market_amount_billion": "amount_billion", - "market_recent_average_amount_billion": "recent_average_amount_billion", - "market_up_count": "up_count", - "market_down_count": "down_count", - "market_limit_up_count": "limit_up_count", - "market_limit_down_count": "limit_down_count", - } - for manual_key, target in stock_map.items(): - if manual_key in manual_data: - stock[target] = manual_data[manual_key] - for manual_key, target in sector_map.items(): - if manual_key in manual_data: - sector[target] = manual_data[manual_key] - for manual_key, target in overview_map.items(): - if manual_key in manual_data: - overview[target] = manual_data[manual_key] - - if any(key.startswith("stock_") for key in manual_data): - stock.setdefault("code", stock_code) - stock.setdefault("name", stock_code or "--") - stock["_quantitative_mode"] = "intraday" if market_mode == "intraday" else "historical" - if market_mode == "intraday" and "stock_volume_activity_ratio" in manual_data: - stock["activity_source"] = "user_supplied" - if any(key.startswith("sector_") for key in manual_data): - sector["_quantitative_mode"] = "intraday" if market_mode == "intraday" else "historical" - sector.setdefault("taxonomy", "sw_l2") - - index_keys = ( - ("index_sh_change", "000001.SH", "上证指数"), - ("index_sz_change", "399001.SZ", "深证成指"), - ("index_cy_change", "399006.SZ", "创业板指"), - ) - rows = {str(row.get("ts_code") or row.get("code") or ""): dict(row) for row in index_context.get("indices") or []} - for manual_key, code, name in index_keys: - if manual_key not in manual_data: - continue - row = rows.get(code, {"ts_code": code, "name": name}) - row.update({"pct_chg": manual_data[manual_key], "trade_date": trade_date}) - rows[code] = row - ordered_rows = [rows.get(code) for _, code, _ in index_keys] - if all(ordered_rows): - index_context["indices"] = ordered_rows - changes = [float(row.get("pct_chg") or 0) for row in ordered_rows] - aggregate = dict(index_context.get("aggregate") or {}) - aggregate["average_pct_chg"] = sum(changes) / 3 - index_context["aggregate"] = aggregate - return dashboard, index_context, sector, stock - - @classmethod - def _heaven_line_checks( - cls, - trade_date: str, - dashboard: dict[str, Any], - recent_history: list[dict[str, Any]], - index_context: dict[str, Any], - sector: dict[str, Any], - stock: dict[str, Any], - market_mode: str, - manual_data: dict[str, Any], - ) -> list[dict[str, Any]]: - intraday = market_mode == "intraday" - closed = market_mode == "closed" - schema = cls._heaven_manual_schema(market_mode) - required = { - 1: (["stock_amount_percentile", "stock_turnover_relative", "stock_volume_activity_ratio"] if intraday else ["stock_amount_percentile", "stock_turnover_rate", "stock_seal_amount_million", "stock_open_times"]), - 2: ["stock_change", "stock_streak", "stock_status"], - 3: (["sector_name", "sector_up_count", "sector_down_count", "sector_coverage", "sector_relative_turnover"] if intraday else ["sector_name", "sector_up_count", "sector_down_count", "sector_coverage", "sector_member_equal_change", "sector_leading_pct"]), - 4: ["sector_name", "sector_change", "sector_leading_pct"], - 5: ["market_sentiment_score", "market_seal_rate", "market_amount_billion", "market_recent_average_amount_billion", "market_up_count", "market_down_count", "market_limit_up_count", "market_limit_down_count"], - 6: ["index_sh_change", "index_sz_change", "index_cy_change"], - } - names = { - 1: ("初爻", "个股内核", "成交活跃、换手与量能"), - 2: ("二爻", "个股外显", "涨跌、连板与状态"), - 3: ("三爻", "行业内核", "行业宽度与成交活跃"), - 4: ("四爻", "行业外显", "行业涨跌与领涨表现"), - 5: ("五爻", "市场内核", "情绪、封板、成交与市场宽度"), - 6: ("上爻", "指数外显", "三大指数当日涨跌"), - } - - index_date = str(index_context.get("trade_date") or "").replace("-", "") - index_rows = list(index_context.get("indices") or []) - index_dates = {str(row.get("trade_date") or "").replace("-", "") for row in index_rows} - index_issues = [] - if len(index_rows) < 3: - index_issues.append(f"三大指数仅取得 {len(index_rows)}/3 条行情") - elif index_date != trade_date or index_dates != {trade_date}: - actual_dates = "、".join(sorted(value for value in index_dates if value)) or "未知" - index_issues.append(f"指数实际日期为 {actual_dates},目标交易日为 {trade_date}") - elif not index_context.get("precise"): - index_issues.append("三大指数行情未通过完整性校验") - elif intraday and not index_context.get("realtime"): - index_issues.append("盘中缺少可核验的实时指数行情") - elif not intraday and (index_context.get("realtime") or str(index_context.get("source") or "") != "tushare"): - index_issues.append("收盘或历史行情不是官方指数日线") - - sector_date = str(sector.get("trade_date") or "").replace("-", "") - sector_coverage = float(sector.get("coverage") or 0) - sector_explained_count = int( - sector.get("explained_count") - if sector.get("explained_count") is not None - else sector.get("quote_count") or 0 - ) - sector_explained_coverage = float( - sector.get("explained_coverage") - if sector.get("explained_coverage") is not None - else sector_coverage - ) - sector_coverage_issue = _sector_coverage_issue( - int(sector.get("member_count") or 0), - int(sector.get("quote_count") or 0), - sector_explained_coverage, - sector_explained_count, - ) - sector_common = [] - if not sector: - sector_common.append("未取得申万二级行业归属") - elif sector.get("taxonomy") != "sw_l2": - sector_common.append("行业分类不是申万二级") - elif sector_date != trade_date: - sector_common.append("行业行情日期与目标交易日不一致") - elif intraday and not sector.get("realtime"): - sector_common.append("盘中行业行情不是申万实时行情") - elif market_mode == "historical" and sector.get("realtime"): - sector_common.append("历史行业行情不能使用实时快照") - elif closed and sector.get("realtime") and not sector.get("finalized"): - sector_common.append("收盘行业实时行情尚未形成15:00最终快照") - sector_inner = list(sector_common) - sector_outer = list(sector_common) - if not sector.get("inner_precise", sector.get("precise")): - sector_inner.append(str(sector.get("inner_error") or sector.get("error") or "行业内核数据未通过校验")) - if not sector.get("outer_precise", sector.get("precise")): - sector_outer.append(str(sector.get("outer_error") or sector.get("error") or "行业外显数据未通过校验")) - if sector and sector_coverage_issue and sector_coverage_issue not in sector_inner: - sector_inner.append(sector_coverage_issue) - if sector.get("realtime") and not sector.get("relative_turnover"): - sector_inner.append("缺少行业相对全市场换手活跃度") - - stock_date = str(stock.get("trade_date") or "").replace("-", "") - stock_common = [] - if not stock.get("code"): - stock_common.append("尚未载入有效个股") - elif stock_date != trade_date: - stock_common.append(f"个股实际日期为 {stock_date or '未知'},目标交易日为 {trade_date}") - elif not stock.get("precise"): - stock_common.append("个股行情未通过完整性校验") - elif intraday and not stock.get("realtime"): - stock_common.append("盘中个股行情不是实时行情") - elif not intraday and (stock.get("realtime") or str(stock.get("data_source") or "") != "tushare"): - stock_common.append("收盘或历史个股行情不是官方日线") - stock_inner = list(stock_common) - if intraday and stock.get("turnover_source") in {None, "", "unavailable"}: - stock_inner.append("缺少可核验的实时换手率") - if intraday and stock.get("activity_source") in {None, "", "unavailable"}: - stock_inner.append("缺少同时间进度量能基准") - - overview = dashboard.get("overview") or {} - market_key_map = { - "market_sentiment_score": "sentiment_score", "market_seal_rate": "seal_rate", - "market_amount_billion": "amount_billion", "market_recent_average_amount_billion": "recent_average_amount_billion", - "market_up_count": "up_count", "market_down_count": "down_count", - "market_limit_up_count": "limit_up_count", "market_limit_down_count": "limit_down_count", - } - market_issues = [] - for manual_key, source_key in market_key_map.items(): - if source_key == "recent_average_amount_billion": - history_values = [item.get("amount_billion") for item in recent_history[:-1] if item.get("amount_billion") is not None] - if source_key not in overview and not history_values: - market_issues.append(f"缺少{schema[manual_key]['label']}") - elif source_key not in overview or overview.get(source_key) is None: - market_issues.append(f"缺少{schema[manual_key]['label']}") - - automatic_issues = { - 1: stock_inner, 2: stock_common, 3: sector_inner, - 4: sector_outer, 5: market_issues, 6: index_issues, - } - limits = list(dashboard.get("limits") or []) - scores = _market_line_scores(dashboard, recent_history, index_context, sector, stock, limits) - - value_map: dict[str, Any] = { - "stock_amount_percentile": stock.get("amount_percentile"), - "stock_turnover_rate": stock.get("turnover_rate"), - "stock_turnover_relative": stock.get("turnover_relative"), - "stock_volume_activity_ratio": stock.get("volume_activity_ratio"), - "stock_seal_amount_million": stock.get("seal_amount_million"), - "stock_open_times": stock.get("open_times"), - "stock_change": stock.get("change"), "stock_streak": stock.get("streak"), - "stock_status": stock.get("status"), "sector_name": sector.get("name"), - "sector_up_count": sector.get("up_count"), "sector_down_count": sector.get("down_count"), - "sector_coverage": sector.get("coverage"), "sector_relative_turnover": sector.get("relative_turnover"), - "sector_member_equal_change": sector.get("member_equal_change"), - "sector_change": sector.get("change"), "sector_leading_pct": sector.get("leading_pct"), - "market_sentiment_score": overview.get("sentiment_score"), "market_seal_rate": overview.get("seal_rate"), - "market_amount_billion": overview.get("amount_billion"), - "market_recent_average_amount_billion": overview.get("recent_average_amount_billion"), - "market_up_count": overview.get("up_count"), "market_down_count": overview.get("down_count"), - "market_limit_up_count": overview.get("limit_up_count"), "market_limit_down_count": overview.get("limit_down_count"), - } - history_values = [float(item.get("amount_billion")) for item in recent_history[:-1] if item.get("amount_billion") is not None] - if value_map["market_recent_average_amount_billion"] is None and history_values: - value_map["market_recent_average_amount_billion"] = sum(history_values) / len(history_values) - if value_map["stock_amount_percentile"] is None and not intraday: - amount = float(stock.get("amount_billion") or 0) - amounts = [float(item.get("amount_billion") or 0) for item in limits if item.get("amount_billion") is not None] - value_map["stock_amount_percentile"] = ( - sum(item <= amount for item in amounts) / len(amounts) * 100 if amounts else None - ) - row_by_code = {str(row.get("ts_code") or row.get("code") or ""): row for row in index_context.get("indices") or []} - value_map.update({ - "index_sh_change": (row_by_code.get("000001.SH") or {}).get("pct_chg"), - "index_sz_change": (row_by_code.get("399001.SZ") or {}).get("pct_chg"), - "index_cy_change": (row_by_code.get("399006.SZ") or {}).get("pct_chg"), - }) - - def missing_value(key: str) -> bool: - value = value_map.get(key) - return value is None or (isinstance(value, str) and not value.strip()) - - invalid_fields = { - line_number: {key for key in keys if missing_value(key)} - for line_number, keys in required.items() - } - if stock_common: - invalid_fields[1].update(required[1]) - invalid_fields[2].update(required[2]) - else: - if intraday and stock.get("turnover_source") in {None, "", "unavailable"}: - invalid_fields[1].add("stock_turnover_relative") - if intraday and stock.get("activity_source") in {None, "", "unavailable"}: - invalid_fields[1].add("stock_volume_activity_ratio") - - if sector_common: - invalid_fields[3].update(required[3]) - invalid_fields[4].update(required[4]) - else: - if not sector.get("inner_precise", sector.get("precise")) or sector_coverage_issue: - invalid_fields[3].update(key for key in required[3] if key != "sector_name") - if sector.get("realtime") and not sector.get("relative_turnover"): - invalid_fields[3].add("sector_relative_turnover") - # The official SW index supplies only the sector's external change. A valid - # membership name and member-stock leader remain usable when that quote fails. - if not sector.get("outer_precise", sector.get("precise")): - invalid_fields[4].add("sector_change") - - if index_issues: - invalid_fields[6].update(required[6]) - - checks = [] - for line_number in range(1, 7): - manual_keys = [key for key in required[line_number] if key in manual_data] - unresolved_fields = [ - key for key in required[line_number] - if key in invalid_fields[line_number] and key not in manual_data - ] - hard_missing_identity = line_number in {1, 2} and not stock.get("code") - passed = not hard_missing_identity and not unresolved_fields - status = "manual" if passed and manual_keys else "passed" if passed else "failed" - reasons = [] if passed else [ - *( ["请先输入并载入股票代码或名称"] if hard_missing_identity else automatic_issues[line_number] ), - *( ["需补充:" + "、".join(schema[key]["label"] for key in unresolved_fields)] if unresolved_fields else [] ), - ] - score = float(scores[line_number - 1]["score"]) - position, layer, formula = names[line_number] - checks.append({ - "line": line_number, "position": position, "layer": layer, "formula": formula, - "status": status, "passed": passed, "reasons": reasons, - "score": round(score, 3) if passed else None, - "line_value": _score_to_line(score) if passed else None, - "evidence": scores[line_number - 1]["evidence"] if passed else [], - "fields": [ - { - "key": key, "label": schema[key]["label"], "unit": schema[key].get("unit", ""), - "type": schema[key].get("type", "number"), "options": schema[key].get("options", []), - "value": value_map.get(key), "manual": key in manual_data, - "required": True, "min": schema[key].get("min"), "max": schema[key].get("max"), - "integer": bool(schema[key].get("integer")), - } - for key in required[line_number] - ], - }) - return checks - - def _resolve_heaven_stock_code(self, query: str) -> str: - raw = validate_text(query, "股票代码或名称", 30, required=True) - code_match = re.fullmatch(r"(\d{6})(?:\.(?:SH|SZ|BJ))?", raw.upper()) - if code_match: - return validate_stock_code(code_match.group(1)) - - candidates = self.database.search_stock_master(raw) - exact = [item for item in candidates if str(item.get("name") or "").casefold() == raw.casefold()] - if not exact and self.configured: - try: - rows = self._tushare_client().query( - "stock_basic", - {"name": raw, "list_status": "L"}, - "ts_code,symbol,name,industry,market,list_date", - ) - except TushareError: - rows = [] - if rows: - self.database.upsert_stock_master(rows) - candidates = self.database.search_stock_master(raw) - exact = [ - item - for item in candidates - if str(item.get("name") or "").casefold() == raw.casefold() - ] - - matches = exact or candidates - if len(matches) == 1: - return validate_stock_code(str(matches[0].get("code") or "")) - if len(matches) > 1: - choices = "、".join( - f"{item.get('name') or '--'}({item.get('code') or '--'})" - for item in matches[:5] - ) - raise ValueError(f"匹配到多只股票:{choices}。请输入六位股票代码。") - raise ValueError(f"未找到股票“{raw}”,请检查名称或输入六位股票代码。") - - def heaven_setup( - self, - trade_date: str, - sector_name: str = "", - stock_code: str = "", - manual_data: dict[str, Any] | None = None, - ) -> dict[str, Any]: - normalized_date = normalize_date(trade_date) - dashboard = self.get_dashboard(normalized_date) - data_date = normalize_date(str(dashboard.get("meta", {}).get("trade_date") or normalized_date)) - recent_history = self.database.snapshot_summaries(data_date, 10) - market_mode = self._heaven_market_mode(data_date, dashboard) - manual_data = self._validate_heaven_manual_data(manual_data, market_mode) - index_context = self._heaven_index_context(data_date, dashboard, market_mode) - external_stock = None - normalized_stock_code = "" - if stock_code.strip(): - normalized_stock_code = self._resolve_heaven_stock_code(stock_code) - external_stock = self._heaven_stock_context( - normalized_stock_code, - data_date, - dashboard, - market_mode, - ) - external_sector = None - if normalized_stock_code and self.configured: - external_sector = self._heaven_sector_context( - normalized_stock_code, - data_date, - market_mode, - ) - if external_sector and external_stock: - external_stock["sector"] = external_sector.get("name") or external_stock.get("sector") - dashboard, index_context, external_sector, external_stock = self._apply_heaven_manual_data( - dashboard, - index_context, - external_sector, - external_stock, - manual_data, - market_mode, - data_date, - normalized_stock_code, - ) - if external_sector and external_stock: - external_stock["sector"] = external_sector.get("name") or external_stock.get("sector") - sector_input = str((external_sector or {}).get("name") or sector_name.strip()) - if not normalized_stock_code: - data_checks = [] - chart = { - "available": False, - "selection_required": True, - "data_trade_date": data_date, - "sector": "", - "sector_code": "", - "sector_taxonomy": "", - "stock": {"code": "", "name": "", "status": ""}, - "quality": { - "status": "awaiting_selection", - "issues": [], - "principle": "", - "sources": [], - }, - "index_context": index_context, - } - else: - data_checks = self._heaven_line_checks( - data_date, - dashboard, - recent_history, - index_context, - external_sector or {}, - external_stock or {}, - market_mode, - manual_data, - ) - quality_issues = [ - f"{check['position']}·{check['layer']}:{';'.join(check['reasons'])}" - for check in data_checks - if not check["passed"] - ] - if quality_issues: - chart = { - "available": False, - "selection_required": False, - "data_trade_date": data_date, - "sector": str((external_sector or {}).get("name") or sector_input or "--"), - "sector_code": str((external_sector or {}).get("code") or ""), - "sector_taxonomy": str((external_sector or {}).get("taxonomy") or ""), - "stock": { - "code": normalized_stock_code, - "name": str((external_stock or {}).get("name") or "--"), - "status": str((external_stock or {}).get("status") or ""), - }, - "quality": { - "status": "blocked", - "issues": quality_issues, - "principle": "六爻任一层缺少同日、同口径的有效数据,本系统不成卦。", - "sources": self._heaven_trend_sources( - data_date, index_context, external_sector, external_stock - ), - }, - "index_context": index_context, - } - else: - chart = build_market_hexagram( - dashboard, - recent_history, - index_context, - sector_input, - normalized_stock_code, - external_stock, - external_sector, - ) - chart["available"] = True - chart["selection_required"] = False - manual_active = any(check["status"] == "manual" for check in data_checks) - chart["quality"] = { - "status": "manual" if manual_active else "verified", - "issues": [], - "principle": ( - "自动行情与用户补充数据均已通过同一套量化公式校验。" - if manual_active - else "指数、板块、个股均已通过同日同口径校验。" - ), - "sources": [ - *self._heaven_trend_sources( - data_date, index_context, external_sector, external_stock - ), - *([{ - "lines": "补录爻位", - "layer": "用户补充", - "realtime": market_mode == "intraday", - "detail": str(manual_data.get("note") or "量化数据经原公式重新计算"), - }] if manual_active else []), - ], - } - chart["data_checks"] = data_checks - chart["manual_data"] = manual_data - sector_phase_overrides = self.database.list_sector_phase_overrides() - field = build_five_phase_field( - normalized_date, - sector_phase_overrides, - ) - personal_profile = self.account_personal_field( - normalized_date, - field, - public=True, - ) - daily_fortune_reading = self.database.latest_heaven_reading( - self.current_user_id, "fortune", normalized_date - ) - if self._legacy_truncated_heaven_reading(daily_fortune_reading): - daily_fortune_reading = None - return { - "trade_date": data_date, - "calendar_date": normalized_date, - "market_mode": market_mode, - "chart": chart, - "field": field, - "personal_profile": personal_profile, - "daily_fortune_reading": daily_fortune_reading, - "sector_phase_overrides": [ - {"name": name, "element": element} - for name, element in sector_phase_overrides.items() - ], - "llm": { - "configured": self.llm_configured, - "model": self.llm_primary_model if self.llm_configured else "", - "fallback_configured": self.llm_fallback_configured, - "fallback_model": self.llm_fallback_model if self.llm_fallback_configured else "", - }, - } - - def _heaven_stock_context( - self, - stock_code: str, - trade_date: str, - dashboard: dict[str, Any], - market_mode: str, - ) -> dict[str, Any]: - """Return the only stock contract accepted by heaven trend.""" - pool_row = next( - ( - dict(row) for key in ("limits", "broken", "down_limits") - for row in dashboard.get(key) or [] - if str(row.get("code") or "") == stock_code - ), - {}, - ) - if market_mode == "intraday": - if self.configured: - try: - quote = self._tushare_client().realtime_stock_quote( - tushare_code(stock_code), - trade_date, - ) - return { - **quote, - "status": pool_row.get("status") or "普通", - "seal_amount_million": pool_row.get("seal_amount_million") or 0, - "open_times": pool_row.get("open_times") or 0, - "streak": pool_row.get("streak") or 0, - "precise": True, - } - except TushareError: - pass - if pool_row: - return { - **pool_row, - "data_source": "dashboard_rt" if dashboard.get("meta", {}).get("realtime") else "dashboard", - "trade_date": trade_date, - "realtime": bool(dashboard.get("meta", {}).get("realtime")), - "precise": False, - } - return { - "code": stock_code, - "name": "--", - "sector": "其他", - "trade_date": trade_date, - "realtime": False, - "precise": False, - } - - detail = self.get_stock_detail(stock_code, trade_date, force=True) - detail_meta = detail.get("meta") or {} - stock = detail.get("stock") or {} - resolved_date = normalize_date(str(detail_meta.get("trade_date") or trade_date)) - source = str(detail_meta.get("source") or "") - return { - "code": stock_code, - "name": stock.get("name") or pool_row.get("name") or "--", - "sector": stock.get("industry") or pool_row.get("sector") or "其他", - "status": pool_row.get("status") or "普通", - "change": stock.get("change") or 0, - "turnover_rate": stock.get("turnover_rate") or 0, - "amount_billion": stock.get("amount_billion") or 0, - "seal_amount_million": pool_row.get("seal_amount_million") or 0, - "open_times": pool_row.get("open_times") or 0, - "streak": pool_row.get("streak") or 0, - "data_source": source, - "trade_date": resolved_date, - "realtime": False, - "precise": source == "tushare" and resolved_date == trade_date, - } - - @staticmethod - def _heaven_market_mode( - trade_date: str, - dashboard: dict[str, Any], - now: datetime | None = None, - ) -> str: - """区分盘中、今日收盘和历史,避免把 rt_k 数据来源误当成交易状态。""" - now = now or datetime.now().astimezone() - if trade_date != now.strftime("%Y%m%d"): - return "historical" - meta = dashboard.get("meta") or {} - status = str(meta.get("market_status") or "").lower() - local_time = now.time().replace(tzinfo=None) - if status == "closed" or local_time > datetime.strptime("15:05", "%H:%M").time(): - return "closed" - if status in {"trading", "auction", "pre_open"} or ( - bool(meta.get("realtime")) - and local_time >= datetime.strptime("09:15", "%H:%M").time() - ): - return "intraday" - return "historical" - - @staticmethod - def _heaven_trend_sources( - trade_date: str, - index_context: dict[str, Any], - sector: dict[str, Any] | None, - stock: dict[str, Any] | None, - ) -> list[dict[str, Any]]: - sector = sector or {} - stock = stock or {} - return [ - { - "lines": "五爻、上爻", - "layer": "指数", - "source": index_context.get("source") or "unavailable", - "trade_date": index_context.get("trade_date") or "", - "realtime": bool(index_context.get("realtime")), - "detail": f"三大指数 {len(index_context.get('indices') or [])}/3", - }, - { - "lines": "三爻、四爻", - "layer": "行业", - "source": sector.get("source") or "unavailable", - "trade_date": sector.get("trade_date") or "", - "realtime": bool(sector.get("realtime")), - "detail": ( - f"申万二级 {sector.get('name') or '--'} {sector.get('code') or '--'} " - f"成分覆盖 {int(sector.get('quote_count') or 0)}/{int(sector.get('member_count') or 0)}" - ), - }, - { - "lines": "初爻、二爻", - "layer": "个股", - "source": stock.get("data_source") or "unavailable", - "trade_date": stock.get("trade_date") or trade_date, - "realtime": bool(stock.get("realtime")), - "detail": ( - f"{stock.get('name') or '--'};换手基准 " - f"{stock.get('capital_trade_date') or '--'}" - ), - }, - ] - - @staticmethod - def _heaven_trend_quality_issues( - trade_date: str, - dashboard: dict[str, Any], - index_context: dict[str, Any], - sector: dict[str, Any] | None, - stock: dict[str, Any] | None, - market_mode: str = "historical", - ) -> list[str]: - issues: list[str] = [] - intraday = market_mode == "intraday" - closed = market_mode == "closed" - if intraday: - meta = dashboard.get("meta") or {} - market_status = str(meta.get("market_status") or "") - now = datetime.now().astimezone() - try: - updated_at = datetime.fromisoformat(str(meta.get("updated_at") or "")) - if updated_at.tzinfo is None: - updated_at = updated_at.replace(tzinfo=now.tzinfo) - snapshot_age = (now - updated_at.astimezone(now.tzinfo)).total_seconds() - except ValueError: - snapshot_age = float("inf") - if market_status in {"trading", "auction", "pre_open"} and snapshot_age > 120: - issues.append("主行情快照超过2分钟,请点击顶部刷新") - # 收盘后不再用 dashboard.market_status 作为阻断条件。盘后同步可能将 - # rt_k 快照替换成同日盘后日线而不带该字段;六爻数据本身的日期、 - # 完整性和来源校验已足以判断是否可以成卦。 - - index_date = str(index_context.get("trade_date") or "").replace("-", "") - index_rows = list(index_context.get("indices") or []) - index_row_dates = { - str(row.get("trade_date") or "").replace("-", "") for row in index_rows - } - if not index_context.get("precise") or len(index_rows) < 3: - issues.append("指数层缺少三大指数的有效行情") - elif index_date != trade_date or index_row_dates != {trade_date}: - issues.append("指数行情与目标交易日不一致") - elif intraday and not index_context.get("realtime"): - issues.append("盘中指数层缺少可核验的实时行情") - elif not intraday and ( - index_context.get("realtime") - or str(index_context.get("source") or "") != "tushare" - ): - issues.append("历史/收盘指数层必须使用 Tushare 官方指数日线") - - sector = sector or {} - sector_date = str(sector.get("trade_date") or "").replace("-", "") - sector_coverage = float(sector.get("coverage") or 0) - sector_explained_count = int( - sector.get("explained_count") - if sector.get("explained_count") is not None - else sector.get("quote_count") or 0 - ) - sector_explained_coverage = float( - sector.get("explained_coverage") - if sector.get("explained_coverage") is not None - else sector_coverage - ) - sector_coverage_issue = _sector_coverage_issue( - int(sector.get("member_count") or 0), - int(sector.get("quote_count") or 0), - sector_explained_coverage, - sector_explained_count, - ) - if not sector: - issues.append("行业层缺少申万二级行业归属") - elif sector.get("taxonomy") != "sw_l2": - issues.append("行业层必须使用申万二级行业分类") - elif sector_date != trade_date: - issues.append("行业行情与目标交易日不一致") - elif intraday and not sector.get("realtime"): - issues.append("盘中行业层缺少申万实时行情") - elif market_mode == "historical" and sector.get("realtime"): - issues.append("历史行业层不能使用实时快照") - elif closed and sector.get("realtime") and not sector.get("finalized"): - issues.append("收盘行业层缺少15:00最终快照") - if not sector.get("inner_precise", sector.get("precise")): - issues.append("行业内核缺少可核验的成分行情") - if not sector.get("outer_precise", sector.get("precise")): - issues.append("行业外显缺少申万官方行情") - if sector and sector_coverage_issue: - issues.append(sector_coverage_issue) - if sector.get("realtime") and not sector.get("relative_turnover"): - issues.append("行业内核缺少相对全市场换手活跃度") - - stock = stock or {} - stock_date = str(stock.get("trade_date") or "").replace("-", "") - if not stock or not stock.get("code"): - issues.append("个股层尚未载入有效标的") - elif not stock.get("precise"): - issues.append("个股层缺少可核验的行情数据") - elif stock_date != trade_date: - issues.append("个股行情与目标交易日不一致") - elif intraday and not stock.get("realtime"): - issues.append("盘中个股层不是 rt_k 实时行情") - elif not intraday and ( - stock.get("realtime") - or str(stock.get("data_source") or "") != "tushare" - ): - issues.append("历史/收盘个股层必须使用 Tushare 官方日线") - if intraday and stock and not stock.get("turnover_source"): - issues.append("个股内核缺少可核验的实时换手率") - elif intraday and stock.get("turnover_source") == "unavailable": - issues.append("个股内核缺少流通股本,无法计算实时换手率") - if intraday and stock.get("activity_source") == "unavailable": - issues.append("个股内核缺少近5日量能基准") - elif intraday and not stock.get("activity_source"): - issues.append("个股内核缺少同时间进度量能") - return issues - - def heaven_personal(self, payload: dict[str, Any]) -> dict[str, Any]: - trade_date = normalize_date(str(payload.get("trade_date") or date.today().isoformat())) - field = build_five_phase_field( - trade_date, - self.database.list_sector_phase_overrides(), - ) - personal = self.account_personal_field(trade_date, field, public=True) - if not personal: - raise ValueError("请先在账号设置中保存个人命理资料。") - return personal - - def heaven_hexagram(self, raw_lines: Any) -> dict[str, Any]: - if not isinstance(raw_lines, list): - raise ValueError("六爻起卦结果格式不正确。") - try: - lines = [int(value) for value in raw_lines] - except (TypeError, ValueError) as exc: - raise ValueError("六爻必须由六、七、八、九组成。") from exc - return hexagram_from_lines(lines) - - def heaven_readings( - self, mode: str, context_date: str = "", limit: int = 100 - ) -> dict[str, Any]: - mode = str(mode or "").strip() - if mode not in {"trend", "fortune", "heart"}: - raise ValueError("解读记录类型不正确。") - normalized_date = normalize_date(context_date) if context_date else "" - return { - "mode": mode, - "items": self.database.list_heaven_readings( - self.current_user_id, mode, normalized_date, limit - ), - } - - @staticmethod - def _heaven_reading_identity( - mode: str, context_date: str, context: dict[str, Any] - ) -> tuple[str, str]: - display_date = MarketServiceMixin._display_compact_date(context_date) - if mode == "trend": - stock = (context.get("selected_focus") or {}).get("stock") or {} - code = str(stock.get("code") or "").strip() - name = str(stock.get("name") or "").strip() - hexagram = context.get("hexagram") or {} - transformed = hexagram.get("transformed") or {} - subject = " ".join(item for item in (code, name) if item) or "观势" - detail = f"{display_date} · {hexagram.get('name') or '--'} → {transformed.get('name') or '--'}" - return subject, detail - if mode == "fortune": - field = context.get("five_phase_field") or {} - pillars = field.get("pillars") or {} - dominant = (field.get("balance") or [{}])[0] - subject = f"{display_date} 观气" - detail = ( - f"{pillars.get('year') or '--'}年 · {pillars.get('month') or '--'}月 · " - f"{pillars.get('day') or '--'}日 · {dominant.get('element') or '--'}气偏显" - ) - return subject, detail - hexagram = context.get("hexagram") or {} - transformed = hexagram.get("transformed") or {} - return ( - f"{display_date} 观心", - f"{hexagram.get('name') or '--'} → {transformed.get('name') or '--'}", - ) - - def heaven_interpret(self, payload: dict[str, Any]) -> dict[str, Any]: - mode = str(payload.get("mode") or "").strip() - if mode not in {"trend", "fortune", "heart"}: - raise ValueError("问天解读模式不正确。") - trade_date = normalize_date(str(payload.get("trade_date") or date.today().isoformat())) - if mode == "fortune": - existing = self.database.latest_heaven_reading( - self.current_user_id, "fortune", trade_date - ) - if self._legacy_truncated_heaven_reading(existing): - self.database.delete_heaven_reading( - self.current_user_id, int(existing["id"]) - ) - existing = None - if existing: - return { - "answer": existing["answer"], - "mode": mode, - "compiler": "stored", - "notice": "", - "reading": existing, - "reused": True, - } - if mode in {"trend", "fortune"}: - setup = self.heaven_setup( - trade_date, - str(payload.get("sector") or ""), - str(payload.get("stock_code") or ""), - payload.get("manual_data"), - ) - if mode == "trend": - chart = setup["chart"] - if not chart.get("available"): - issues = ";".join((chart.get("quality") or {}).get("issues") or []) - raise ValueError(f"观势数据未通过六爻校验,暂不解势:{issues}") - hexagram_context = json.loads(json.dumps(chart["hexagram"], ensure_ascii=False)) - for line in hexagram_context.get("lines", []): - line.pop("evidence", None) - line.pop("score", None) - line.pop("talent", None) - line.pop("layer", None) - line.pop("role", None) - if not line.get("moving"): - line.pop("text", None) - line.pop("image", None) - line.pop("line_name", None) - context = { - "data_trade_date": setup["trade_date"], - "selected_focus": { - "sector": chart.get("sector") or "", - "stock": chart.get("stock") or {}, - }, - "hexagram": hexagram_context, - "movement": chart.get("movement") or {}, - } - else: - personal_profile = self.account_personal_field( - setup["calendar_date"], - setup["field"], - public=False, - ) - fortune_field = json.loads(json.dumps(setup["field"], ensure_ascii=False)) - catalog = fortune_field.pop("sector_catalog", []) - dominant_elements = { - item.get("element") for item in fortune_field.get("balance", [])[:2] - } - fortune_field["industry_affinity"] = [ - { - "element": group.get("element"), - "examples": [ - item.get("name") - for item in group.get("industries", [])[:8] - if item.get("name") - ], - } - for group in catalog - if group.get("element") in dominant_elements - ] - context = { - "calendar_date": setup["calendar_date"], - "five_phase_field": fortune_field, - "personal_profile": personal_profile, - } - context_date = setup["calendar_date"] - if mode == "trend": - context_date = setup["trade_date"] - else: - context = { - "hexagram": self.heaven_hexagram(payload.get("lines")), - "ritual": "用户已完成30秒静心、六次三枚铜钱起卦,并在心中察看第一念。问题未输入。", - } - context_date = trade_date - result, compiler = self._call_heaven_agent(mode, context) - subject, subject_detail = self._heaven_reading_identity( - mode, context_date, context - ) - dedupe_key = ( - f"fortune:{context_date}" - if mode == "fortune" - else f"{mode}:{context_date}:{secrets.token_urlsafe(12)}" - ) - reading = self.database.save_heaven_reading( - self.current_user_id, - mode, - context_date, - subject, - subject_detail, - str(result.get("answer") or ""), - context, - dedupe_key, - ) - return { - **result, - "mode": mode, - "compiler": compiler, - "notice": "智能解读已自动切换可用服务。" if compiler == "fallback" else "", - "reading": reading, - "reused": False, - } - - @staticmethod - def _legacy_truncated_heaven_reading(reading: dict[str, Any] | None) -> bool: - return bool(reading and str(reading.get("answer") or "").rstrip().endswith("……")) - - def _call_heaven_agent(self, mode: str, context: dict[str, Any]) -> tuple[dict[str, Any], str]: - result = self.llm_gateway.call( - f"heaven_{mode}", - f"heaven-{mode}-v1", - lambda profile: interpret_heaven( - mode, - context, - profile.api_key, - profile.base_url, - profile.model, - ), - (HeavenAgentError,), - ) - return result.value, result.role - - def _heaven_index_context( - self, - trade_date: str, - dashboard: dict[str, Any], - market_mode: str = "historical", - ) -> dict[str, Any]: - cached = self.database.get_data_snapshot("heaven_indices", trade_date) - cached_valid = False - if cached: - cached_rows = list(cached.get("indices") or []) - cached_dates = { - str(row.get("trade_date") or "").replace("-", "") - for row in cached_rows - } - cached_valid = ( - len(cached_rows) == 3 - and cached_dates == {trade_date} - and bool(cached.get("precise")) - and not cached.get("realtime") - and str(cached.get("source") or "") == "tushare" - and int(cached.get("schema_version") or 0) >= 3 - ) - if market_mode != "intraday" and cached_valid: - return cached - - if not self.configured: - error = "Tushare Token 未配置" - else: - try: - client = self._tushare_client() - if market_mode == "intraday": - payload = self._aggregate_index_context(trade_date) - payload["schema_version"] = 3 - return payload - payload = client.market_indices(trade_date) - payload["schema_version"] = 3 - if market_mode == "closed": - payload["finalized"] = True - self.database.save_data_snapshot( - "heaven_indices", - trade_date, - str(payload.get("source") or "tushare"), - payload, - ) - return payload - except Exception as exc: - error = str(exc) - overview = dashboard.get("overview") or {} - up_count = float(overview.get("up_count") or 0) - down_count = float(overview.get("down_count") or 0) - breadth = (up_count - down_count) / max(up_count + down_count, 1) - return { - "source": "market_breadth_proxy", - "trade_date": trade_date, - "realtime": False, - "precise": False, - "schema_version": 3, - "notice": f"指数数据不可用,当前以市场宽度代理:{error}", - "indices": [], - "aggregate": { - "average_pct_chg": round(breadth * 2.5, 3), - "average_return_5d": 0, - "average_return_20d": 0, - }, - } - - def _aggregate_index_context( - self, - trade_date: str, - tushare_error: str = "", - ) -> dict[str, Any]: - quotes = self.realtime_aggregator.tencent_indices() - epochs = [int(item.get("quote_time_epoch") or 0) for item in quotes] - quote_dates = { - datetime.fromtimestamp(epoch).astimezone().strftime("%Y%m%d") - for epoch in epochs if epoch - } - if len(quotes) != 3 or quote_dates != {trade_date}: - raise ValueError("腾讯三大指数日期与目标交易日不一致") - now = datetime.now().astimezone() - max_skew = 120 if now.hour >= 15 else 15 - if max(epochs) - min(epochs) > max_skew: - raise ValueError(f"腾讯三大指数时间差超过{max_skew}秒") - - code_map = { - "000001": "000001.SH", - "399001": "399001.SZ", - "399006": "399006.SZ", - } - client = self._tushare_client() - indices = [] - start_date = ( - datetime.strptime(trade_date, "%Y%m%d") - timedelta(days=20) - ).strftime("%Y%m%d") - for quote in quotes: - ts_code = code_map[str(quote.get("code") or "")] - history = client.query( - "index_daily", - {"ts_code": ts_code, "start_date": start_date, "end_date": trade_date}, - "ts_code,trade_date,close,pct_chg", - ) - history.sort(key=lambda item: str(item.get("trade_date") or "")) - completed_closes = [ - float(item.get("close") or 0) - for item in history - if str(item.get("trade_date") or "") < trade_date - and float(item.get("close") or 0) > 0 - ] - close_5d = ( - completed_closes[-5] - if len(completed_closes) >= 5 - else completed_closes[0] if completed_closes else 0 - ) - close = float(quote.get("price") or 0) - indices.append( - { - "ts_code": ts_code, - "name": quote.get("name") or ts_code, - "trade_date": trade_date, - "close": close, - "pct_chg": round(float(quote.get("change") or 0), 3), - "return_5d": round((close / close_5d - 1) * 100, 3) if close_5d else 0, - "return_20d": 0, - "amount_billion": float(quote.get("amount_billion") or 0), - "quote_time": quote.get("quote_time") or "", - } - ) - return { - "trade_date": trade_date, - "source": "+".join( - sorted({str(item.get("source") or "web_quote") for item in quotes}) - + ["tushare_index_daily"] - ), - "realtime": True, - "precise": True, - "indices": indices, - "aggregate": { - "average_pct_chg": round( - sum(item["pct_chg"] for item in indices) / len(indices), 3 - ), - "average_return_5d": round( - sum(item["return_5d"] for item in indices) / len(indices), 3 - ), - "average_return_20d": 0, - }, - "quote_time_skew_seconds": max(epochs) - min(epochs), - "notice": ( - "指数实时行情来自腾讯行情,5日趋势来自Tushare历史指数。" - + (f" Tushare实时指数未使用:{tushare_error}" if tushare_error else "") - ), - } - - def _heaven_sector_context( - self, - identifier: str, - trade_date: str, - market_mode: str = "historical", - ) -> dict[str, Any] | None: - """Return the Shenwan L2 sector context for heaven trend. - - 观势行业层只使用申万二级行业。外显盘中使用 rt_sw_k、历史使用 - sw_daily;内核独立使用目标日期成分股行情聚合。收盘过渡期在 - sw_daily 入库前接受同日15:00后的 rt_sw_k 收盘快照。 - """ - cache_key = f"{trade_date}:{identifier.strip().lower()}" - cached = self.database.get_data_snapshot("heaven_sector", cache_key) - cached_date = str((cached or {}).get("trade_date") or "").replace("-", "") - cached_valid = bool( - cached - and cached_date == trade_date - and cached.get("taxonomy") == "sw_l2" - and cached.get("inner_precise", cached.get("precise")) - and cached.get("outer_precise", cached.get("precise")) - and not cached.get("realtime") - and int(cached.get("schema_version") or 0) >= 6 - ) - if market_mode != "intraday" and cached_valid: - return cached - if not self.configured: - return None - try: - payload = self._tushare_client().sw_sector_snapshot( - tushare_code(identifier), - trade_date, - realtime_expected=market_mode == "intraday", - allow_realtime_close=market_mode == "closed", - ) - except TushareError as exc: - if cached_valid: - return cached - return { - "name": "", - "code": "", - "taxonomy": "sw_l2", - "source": "tushare", - "trade_date": trade_date, - "realtime": market_mode == "intraday", - "precise": False, - "inner_precise": False, - "outer_precise": False, - "coverage": 0, - "member_count": 0, - "quote_count": 0, - "error": f"申万二级行业数据获取失败:{exc}", - } - if not payload.get("realtime") and payload.get("precise"): - self.database.save_data_snapshot( - "heaven_sector", - cache_key, - str(payload.get("source") or "tushare"), - payload, - ) - return payload +class HeavenServiceMixin( + HeavenManualMixin, + HeavenMarketContextMixin, + HeavenTrendMixin, + HeavenReadingMixin, +): + pass diff --git a/backend/features/heaven/trend.py b/backend/features/heaven/trend.py new file mode 100644 index 0000000..13aafa7 --- /dev/null +++ b/backend/features/heaven/trend.py @@ -0,0 +1,358 @@ +from __future__ import annotations + +from datetime import datetime +from typing import Any + +from backend.bootstrap.config import normalize_date +from backend.data.providers.tushare_client import _sector_coverage_issue +from backend.features.heaven.engine import build_five_phase_field, build_market_hexagram + + +class HeavenTrendMixin: + def heaven_setup( + self, + trade_date: str, + sector_name: str = "", + stock_code: str = "", + manual_data: dict[str, Any] | None = None, + ) -> dict[str, Any]: + normalized_date = normalize_date(trade_date) + dashboard = self.get_dashboard(normalized_date) + data_date = normalize_date(str(dashboard.get("meta", {}).get("trade_date") or normalized_date)) + recent_history = self.database.snapshot_summaries(data_date, 10) + market_mode = self._heaven_market_mode(data_date, dashboard) + manual_data = self._validate_heaven_manual_data(manual_data, market_mode) + index_context = self._heaven_index_context(data_date, dashboard, market_mode) + external_stock = None + normalized_stock_code = "" + if stock_code.strip(): + normalized_stock_code = self._resolve_heaven_stock_code(stock_code) + external_stock = self._heaven_stock_context( + normalized_stock_code, + data_date, + dashboard, + market_mode, + ) + external_sector = None + if normalized_stock_code and self.configured: + external_sector = self._heaven_sector_context( + normalized_stock_code, + data_date, + market_mode, + ) + if external_sector and external_stock: + external_stock["sector"] = external_sector.get("name") or external_stock.get("sector") + dashboard, index_context, external_sector, external_stock = self._apply_heaven_manual_data( + dashboard, + index_context, + external_sector, + external_stock, + manual_data, + market_mode, + data_date, + normalized_stock_code, + ) + if external_sector and external_stock: + external_stock["sector"] = external_sector.get("name") or external_stock.get("sector") + sector_input = str((external_sector or {}).get("name") or sector_name.strip()) + if not normalized_stock_code: + data_checks = [] + chart = { + "available": False, + "selection_required": True, + "data_trade_date": data_date, + "sector": "", + "sector_code": "", + "sector_taxonomy": "", + "stock": {"code": "", "name": "", "status": ""}, + "quality": { + "status": "awaiting_selection", + "issues": [], + "principle": "", + "sources": [], + }, + "index_context": index_context, + } + else: + data_checks = self._heaven_line_checks( + data_date, + dashboard, + recent_history, + index_context, + external_sector or {}, + external_stock or {}, + market_mode, + manual_data, + ) + quality_issues = [ + f"{check['position']}·{check['layer']}:{';'.join(check['reasons'])}" + for check in data_checks + if not check["passed"] + ] + if quality_issues: + chart = { + "available": False, + "selection_required": False, + "data_trade_date": data_date, + "sector": str((external_sector or {}).get("name") or sector_input or "--"), + "sector_code": str((external_sector or {}).get("code") or ""), + "sector_taxonomy": str((external_sector or {}).get("taxonomy") or ""), + "stock": { + "code": normalized_stock_code, + "name": str((external_stock or {}).get("name") or "--"), + "status": str((external_stock or {}).get("status") or ""), + }, + "quality": { + "status": "blocked", + "issues": quality_issues, + "principle": "六爻任一层缺少同日、同口径的有效数据,本系统不成卦。", + "sources": self._heaven_trend_sources( + data_date, index_context, external_sector, external_stock + ), + }, + "index_context": index_context, + } + else: + chart = build_market_hexagram( + dashboard, + recent_history, + index_context, + sector_input, + normalized_stock_code, + external_stock, + external_sector, + ) + chart["available"] = True + chart["selection_required"] = False + manual_active = any(check["status"] == "manual" for check in data_checks) + chart["quality"] = { + "status": "manual" if manual_active else "verified", + "issues": [], + "principle": ( + "自动行情与用户补充数据均已通过同一套量化公式校验。" + if manual_active + else "指数、板块、个股均已通过同日同口径校验。" + ), + "sources": [ + *self._heaven_trend_sources( + data_date, index_context, external_sector, external_stock + ), + *([{ + "lines": "补录爻位", + "layer": "用户补充", + "realtime": market_mode == "intraday", + "detail": str(manual_data.get("note") or "量化数据经原公式重新计算"), + }] if manual_active else []), + ], + } + chart["data_checks"] = data_checks + chart["manual_data"] = manual_data + sector_phase_overrides = self.database.list_sector_phase_overrides() + field = build_five_phase_field( + normalized_date, + sector_phase_overrides, + ) + personal_profile = self.account_personal_field( + normalized_date, + field, + public=True, + ) + daily_fortune_reading = self.database.latest_heaven_reading( + self.current_user_id, "fortune", normalized_date + ) + if self._legacy_truncated_heaven_reading(daily_fortune_reading): + daily_fortune_reading = None + return { + "trade_date": data_date, + "calendar_date": normalized_date, + "market_mode": market_mode, + "chart": chart, + "field": field, + "personal_profile": personal_profile, + "daily_fortune_reading": daily_fortune_reading, + "sector_phase_overrides": [ + {"name": name, "element": element} + for name, element in sector_phase_overrides.items() + ], + "llm": { + "configured": self.llm_configured, + "model": self.llm_primary_model if self.llm_configured else "", + "fallback_configured": self.llm_fallback_configured, + "fallback_model": self.llm_fallback_model if self.llm_fallback_configured else "", + }, + } + + @staticmethod + def _heaven_market_mode( + trade_date: str, + dashboard: dict[str, Any], + now: datetime | None = None, + ) -> str: + """区分盘中、今日收盘和历史,避免把 rt_k 数据来源误当成交易状态。""" + now = now or datetime.now().astimezone() + if trade_date != now.strftime("%Y%m%d"): + return "historical" + meta = dashboard.get("meta") or {} + status = str(meta.get("market_status") or "").lower() + local_time = now.time().replace(tzinfo=None) + if status == "closed" or local_time > datetime.strptime("15:05", "%H:%M").time(): + return "closed" + if status in {"trading", "auction", "pre_open"} or ( + bool(meta.get("realtime")) + and local_time >= datetime.strptime("09:15", "%H:%M").time() + ): + return "intraday" + return "historical" + + @staticmethod + def _heaven_trend_sources( + trade_date: str, + index_context: dict[str, Any], + sector: dict[str, Any] | None, + stock: dict[str, Any] | None, + ) -> list[dict[str, Any]]: + sector = sector or {} + stock = stock or {} + return [ + { + "lines": "五爻、上爻", + "layer": "指数", + "source": index_context.get("source") or "unavailable", + "trade_date": index_context.get("trade_date") or "", + "realtime": bool(index_context.get("realtime")), + "detail": f"三大指数 {len(index_context.get('indices') or [])}/3", + }, + { + "lines": "三爻、四爻", + "layer": "行业", + "source": sector.get("source") or "unavailable", + "trade_date": sector.get("trade_date") or "", + "realtime": bool(sector.get("realtime")), + "detail": ( + f"申万二级 {sector.get('name') or '--'} {sector.get('code') or '--'} " + f"成分覆盖 {int(sector.get('quote_count') or 0)}/{int(sector.get('member_count') or 0)}" + ), + }, + { + "lines": "初爻、二爻", + "layer": "个股", + "source": stock.get("data_source") or "unavailable", + "trade_date": stock.get("trade_date") or trade_date, + "realtime": bool(stock.get("realtime")), + "detail": ( + f"{stock.get('name') or '--'};换手基准 " + f"{stock.get('capital_trade_date') or '--'}" + ), + }, + ] + + @staticmethod + def _heaven_trend_quality_issues( + trade_date: str, + dashboard: dict[str, Any], + index_context: dict[str, Any], + sector: dict[str, Any] | None, + stock: dict[str, Any] | None, + market_mode: str = "historical", + ) -> list[str]: + issues: list[str] = [] + intraday = market_mode == "intraday" + closed = market_mode == "closed" + if intraday: + meta = dashboard.get("meta") or {} + market_status = str(meta.get("market_status") or "") + now = datetime.now().astimezone() + try: + updated_at = datetime.fromisoformat(str(meta.get("updated_at") or "")) + if updated_at.tzinfo is None: + updated_at = updated_at.replace(tzinfo=now.tzinfo) + snapshot_age = (now - updated_at.astimezone(now.tzinfo)).total_seconds() + except ValueError: + snapshot_age = float("inf") + if market_status in {"trading", "auction", "pre_open"} and snapshot_age > 120: + issues.append("主行情快照超过2分钟,请点击顶部刷新") + # 收盘后不再用 dashboard.market_status 作为阻断条件。盘后同步可能将 + # rt_k 快照替换成同日盘后日线而不带该字段;六爻数据本身的日期、 + # 完整性和来源校验已足以判断是否可以成卦。 + + index_date = str(index_context.get("trade_date") or "").replace("-", "") + index_rows = list(index_context.get("indices") or []) + index_row_dates = { + str(row.get("trade_date") or "").replace("-", "") for row in index_rows + } + if not index_context.get("precise") or len(index_rows) < 3: + issues.append("指数层缺少三大指数的有效行情") + elif index_date != trade_date or index_row_dates != {trade_date}: + issues.append("指数行情与目标交易日不一致") + elif intraday and not index_context.get("realtime"): + issues.append("盘中指数层缺少可核验的实时行情") + elif not intraday and ( + index_context.get("realtime") + or str(index_context.get("source") or "") != "tushare" + ): + issues.append("历史/收盘指数层必须使用 Tushare 官方指数日线") + + sector = sector or {} + sector_date = str(sector.get("trade_date") or "").replace("-", "") + sector_coverage = float(sector.get("coverage") or 0) + sector_explained_count = int( + sector.get("explained_count") + if sector.get("explained_count") is not None + else sector.get("quote_count") or 0 + ) + sector_explained_coverage = float( + sector.get("explained_coverage") + if sector.get("explained_coverage") is not None + else sector_coverage + ) + sector_coverage_issue = _sector_coverage_issue( + int(sector.get("member_count") or 0), + int(sector.get("quote_count") or 0), + sector_explained_coverage, + sector_explained_count, + ) + if not sector: + issues.append("行业层缺少申万二级行业归属") + elif sector.get("taxonomy") != "sw_l2": + issues.append("行业层必须使用申万二级行业分类") + elif sector_date != trade_date: + issues.append("行业行情与目标交易日不一致") + elif intraday and not sector.get("realtime"): + issues.append("盘中行业层缺少申万实时行情") + elif market_mode == "historical" and sector.get("realtime"): + issues.append("历史行业层不能使用实时快照") + elif closed and sector.get("realtime") and not sector.get("finalized"): + issues.append("收盘行业层缺少15:00最终快照") + if not sector.get("inner_precise", sector.get("precise")): + issues.append("行业内核缺少可核验的成分行情") + if not sector.get("outer_precise", sector.get("precise")): + issues.append("行业外显缺少申万官方行情") + if sector and sector_coverage_issue: + issues.append(sector_coverage_issue) + if sector.get("realtime") and not sector.get("relative_turnover"): + issues.append("行业内核缺少相对全市场换手活跃度") + + stock = stock or {} + stock_date = str(stock.get("trade_date") or "").replace("-", "") + if not stock or not stock.get("code"): + issues.append("个股层尚未载入有效标的") + elif not stock.get("precise"): + issues.append("个股层缺少可核验的行情数据") + elif stock_date != trade_date: + issues.append("个股行情与目标交易日不一致") + elif intraday and not stock.get("realtime"): + issues.append("盘中个股层不是 rt_k 实时行情") + elif not intraday and ( + stock.get("realtime") + or str(stock.get("data_source") or "") != "tushare" + ): + issues.append("历史/收盘个股层必须使用 Tushare 官方日线") + if intraday and stock and not stock.get("turnover_source"): + issues.append("个股内核缺少可核验的实时换手率") + elif intraday and stock.get("turnover_source") == "unavailable": + issues.append("个股内核缺少流通股本,无法计算实时换手率") + if intraday and stock.get("activity_source") == "unavailable": + issues.append("个股内核缺少近5日量能基准") + elif intraday and not stock.get("activity_source"): + issues.append("个股内核缺少同时间进度量能") + return issues diff --git a/backend/features/market/insights.py b/backend/features/market/insights.py index 4ec8274..b68becd 100644 --- a/backend/features/market/insights.py +++ b/backend/features/market/insights.py @@ -1,5 +1,6 @@ from __future__ import annotations +# These imports preserve the historical module-level compatibility surface. import copy import json from datetime import datetime, time as dt_time, timedelta, timezone @@ -9,1299 +10,36 @@ from typing import TYPE_CHECKING, Any, Callable from backend.data.numbers import non_nan_number as _number from backend.data.providers.ifind_client import IfindError, IfindHttpClient from backend.data.providers.tushare_client import TushareClient, TushareError - -if TYPE_CHECKING: - from database import ReviewDatabase +from backend.features.market.insights_auction import ( + MarketAuctionInsightsMixin as _MarketAuctionInsightsMixin, +) +from backend.features.market.insights_auction_data import ( + MarketAuctionDataMixin as _MarketAuctionDataMixin, +) +from backend.features.market.insights_auction_scoring import ( + MarketAuctionScoringMixin as _MarketAuctionScoringMixin, +) +from backend.features.market.insights_context import ( + CHINA_TIMEZONE, + MarketInsightsContextMixin as _MarketInsightsContextMixin, + _display_date, +) +from backend.features.market.insights_popularity import ( + MarketPopularityInsightsMixin as _MarketPopularityInsightsMixin, +) +from backend.features.market.insights_themes import ( + MarketThemeInsightsMixin as _MarketThemeInsightsMixin, +) -CHINA_TIMEZONE = timezone(timedelta(hours=8)) - - -def _display_date(value: str) -> str: - text = str(value or "").replace("-", "") - if len(text) != 8: - return str(value or "") - return f"{text[:4]}-{text[4:6]}-{text[6:]}" - - -class MarketInsightsService: +class MarketInsightsService( + _MarketInsightsContextMixin, + _MarketAuctionScoringMixin, + _MarketAuctionDataMixin, + _MarketAuctionInsightsMixin, + _MarketThemeInsightsMixin, + _MarketPopularityInsightsMixin, +): """Read-only market features backed by Tushare and shared SQLite caches.""" - def __init__( - self, - database: ReviewDatabase, - client: TushareClient, - now_provider: Callable[[], datetime] | None = None, - ifind: IfindHttpClient | None = None, - ) -> None: - self.database = database - self.client = client - self._now_provider = now_provider or (lambda: datetime.now(CHINA_TIMEZONE)) - self.ifind = ifind - - def _trade_context(self, requested_date: str) -> tuple[str, str]: - """Resolve trading dates without making cached feature pages depend on Tushare uptime.""" - requested = str(requested_date or "").replace("-", "") - try: - return self.client.resolve_trade_context(requested) - except TushareError: - latest = self.database.get_latest_real_snapshot(requested) or {} - trade_date = str( - (latest.get("meta") or {}).get("trade_date") - or latest.get("_snapshot_date") - or requested - ).replace("-", "") - previous = self.database.get_latest_real_snapshot(trade_date, strictly_before=True) or {} - previous_date = str( - (previous.get("meta") or {}).get("trade_date") - or previous.get("_snapshot_date") - or "" - ).replace("-", "") - return trade_date, previous_date - - def _latest_feature_snapshot(self, kind: str, trade_date: str) -> dict[str, Any] | None: - return self.database.get_latest_data_snapshot(kind, "", trade_date) - - def _auction_session(self, requested_date: str, trade_date: str) -> dict[str, Any]: - now = self._now_provider() - if now.tzinfo is None: - now = now.replace(tzinfo=CHINA_TIMEZONE) - else: - now = now.astimezone(CHINA_TIMEZONE) - requested = str(requested_date or "").replace("-", "") - today = now.strftime("%Y%m%d") - if requested != today or trade_date != today: - return { - "phase": "archive", - "actionable": False, - "next_transition_at": "", - } - - local_time = now.time().replace(tzinfo=None) - transitions = ( - (dt_time(9, 15), "pending", dt_time(9, 15)), - (dt_time(9, 25), "observing", dt_time(9, 25)), - (dt_time(9, 30), "selection", dt_time(9, 30)), - ) - for boundary, phase, next_boundary in transitions: - if local_time < boundary: - transition = now.replace( - hour=next_boundary.hour, - minute=next_boundary.minute, - second=0, - microsecond=0, - ) - return { - "phase": phase, - "actionable": phase == "selection", - "next_transition_at": transition.isoformat(timespec="seconds"), - } - return { - "phase": "finalized", - "actionable": False, - "next_transition_at": "", - } - - def _stock_master(self) -> dict[str, dict[str, Any]]: - rows = self.database.list_stock_master() - if not rows: - rows = self.client.query( - "stock_basic", - {"list_status": "L"}, - "ts_code,name,industry,market,list_date", - ) - self.database.upsert_stock_master(rows) - rows = self.database.list_stock_master() - return {str(row.get("ts_code") or ""): row for row in rows} - - @staticmethod - def _expectation_label(actual_strength: float, expected_change: float) -> str: - difference = actual_strength - expected_change - if difference >= 1.5: - return "超预期" - if difference <= -1.5: - return "低于预期" - return "符合预期" - - @staticmethod - def _auction_confirmation(row: dict[str, Any]) -> float: - volume_ratio = _number(row.get("volume_ratio")) - turnover_rate = _number(row.get("turnover_rate")) - amount_million = _number(row.get("amount_million")) - return ( - (0.6 if volume_ratio >= 2 else 0.3 if volume_ratio >= 1.2 else -0.5 if volume_ratio < 0.6 else 0) - + (0.25 if turnover_rate >= 0.15 else -0.25 if turnover_rate < 0.03 else 0) - + (0.3 if amount_million >= 20 else 0.15 if amount_million >= 5 else -0.3 if amount_million < 1 else 0) - ) - - @staticmethod - def _attention_score( - row: dict[str, Any], - expected_change: float, - core_tags: list[str], - sources: list[str], - prior_streak: int, - strong_sector: bool, - ) -> float: - if core_tags: - identity_score = 35.0 - elif prior_streak >= 2: - identity_score = 27.0 - elif any(source in {"昨日涨停", "昨日炸板"} for source in sources): - identity_score = 21.0 - else: - identity_score = 14.0 - deviation_score = min(30.0, abs(_number(row.get("change")) - expected_change) * 5) - volume_score = min(10.0, max(0.0, _number(row.get("volume_ratio"))) / 2 * 10) - amount_score = min(6.0, max(0.0, _number(row.get("amount_million"))) / 10 * 6) - turnover_score = min(4.0, max(0.0, _number(row.get("turnover_rate"))) / 0.2 * 4) - theme_score = 15.0 if strong_sector else 7.0 if row.get("concepts") else 0.0 - return round(min(100.0, identity_score + deviation_score + volume_score + amount_score + turnover_score + theme_score), 1) - - def _auction_candidates( - self, - rows: list[dict[str, Any]], - baseline_date: str, - ) -> tuple[list[dict[str, Any]], dict[str, Any], list[dict[str, Any]]]: - """Build a narrow, explainable universe from prior limits, breaks and top-20 hot lists.""" - snapshot = self.database.get_snapshot(baseline_date) or {} - prior_limits = list(snapshot.get("limits") or []) - prior_broken = list(snapshot.get("broken") or []) - prior_sectors = list(snapshot.get("sectors") or []) - strong_sector_names = { - str(item.get("name") or "") for item in prior_sectors[:5] if item.get("name") - } - ths_rows, dc_rows, errors = self._hot_rows(baseline_date) - candidates: dict[str, dict[str, Any]] = {} - core_tags: dict[str, set[str]] = {} - - def ensure_candidate(item: dict[str, Any]) -> dict[str, Any] | None: - code = str(item.get("code") or str(item.get("ts_code") or "").split(".")[0]) - if not code: - return None - return candidates.setdefault( - code, - { - "sources": [], - "streak": 0, - "sector": str(item.get("sector") or "其他"), - "name": str(item.get("name") or item.get("ts_name") or "--"), - "concepts": [], - "ths_rank": None, - "dc_rank": None, - }, - ) - - for item in prior_limits: - candidate = ensure_candidate(item) - if candidate is None: - continue - candidate["sources"].append("昨日涨停") - candidate["streak"] = max(1, int(_number(item.get("streak"), 1))) - - for item in prior_broken: - candidate = ensure_candidate(item) - if candidate is not None and "昨日炸板" not in candidate["sources"]: - candidate["sources"].append("昨日炸板") - - limit_streaks = [max(1, int(_number(item.get("streak"), 1))) for item in prior_limits] - highest_streak = max(limit_streaks, default=0) - for item in prior_limits: - code = str(item.get("code") or "") - streak = max(1, int(_number(item.get("streak"), 1))) - if streak >= 3: - core_tags.setdefault(code, set()).add("三板以上") - if highest_streak and streak == highest_streak: - core_tags.setdefault(code, set()).add("市场最高板") - - for sector in prior_sectors[:5]: - name = str(sector.get("name") or "") - members = [item for item in prior_limits if str(item.get("sector") or "其他") == name] - if not members: - continue - leader = max( - members, - key=lambda item: ( - int(_number(item.get("streak"), 1)), - _number(item.get("amount_billion")), - -_number(item.get("open_times")), - ), - ) - core_tags.setdefault(str(leader.get("code") or ""), set()).add("题材核心") - - leadership = sorted( - prior_limits, - key=lambda item: ( - int(_number(item.get("streak"), 1)), - str(item.get("sector") or "") in strong_sector_names, - _number(item.get("amount_billion")), - ), - reverse=True, - ) - if leadership: - core_tags.setdefault(str(leadership[0].get("code") or ""), set()).add("市场领涨") - - hot_records: dict[str, dict[str, Any]] = {} - - for source, hot_rows, data_type in ( - ("同花顺热榜", ths_rows, "热股"), - ("东方财富热榜", dc_rows, "A股市场"), - ): - for item in hot_rows: - if str(item.get("data_type") or "") != data_type: - continue - ts_code = str(item.get("ts_code") or "") - code = ts_code.split(".")[0] - rank = max(1, int(_number(item.get("rank"), 9999))) - if not code or rank > 20: - continue - hot = hot_records.setdefault( - code, - { - "name": str(item.get("ts_name") or "--"), - "concepts": [], - "ths_rank": None, - "dc_rank": None, - }, - ) - hot["ths_rank" if source == "同花顺热榜" else "dc_rank"] = rank - if source == "同花顺热榜": - hot["concepts"] = self._parse_concepts(item.get("concept")) - - ranked_hot = sorted( - hot_records.items(), - key=lambda pair: ( - ((21 - (pair[1].get("ths_rank") or 21)) / 20) - + ((21 - (pair[1].get("dc_rank") or 21)) / 20) - + (0.35 if pair[1].get("ths_rank") and pair[1].get("dc_rank") else 0) - ), - reverse=True, - ) - for code, _ in ranked_hot[:5]: - core_tags.setdefault(code, set()).add("人气前5") - - for code, hot in hot_records.items(): - ranks = [rank for rank in (hot.get("ths_rank"), hot.get("dc_rank")) if isinstance(rank, int)] - dual = len(ranks) == 2 - if not ranks or (min(ranks) > 10 and not dual and code not in candidates and code not in core_tags): - continue - candidate = candidates.setdefault( - code, - { - "sources": [], - "streak": 0, - "sector": "其他", - "name": hot["name"], - "concepts": [], - "ths_rank": None, - "dc_rank": None, - }, - ) - candidate["ths_rank"] = hot.get("ths_rank") - candidate["dc_rank"] = hot.get("dc_rank") - candidate["concepts"] = hot.get("concepts") or [] - if hot.get("ths_rank") and "同花顺热榜" not in candidate["sources"]: - candidate["sources"].append("同花顺热榜") - if hot.get("dc_rank") and "东方财富热榜" not in candidate["sources"]: - candidate["sources"].append("东方财富热榜") - - normalized = [] - for row in rows: - candidate = candidates.get(str(row.get("code") or "")) - if not candidate: - continue - streak = int(candidate["streak"]) - expected_change = {1: 1.5, 2: 3.0, 3: 4.0}.get(streak, 5.0 if streak else 0.5) - ranks = [ - rank for rank in (candidate.get("ths_rank"), candidate.get("dc_rank")) - if isinstance(rank, int) - ] - if len(ranks) == 2: - expected_change += 0.8 - elif ranks: - best_rank = min(ranks) - expected_change += 0.7 if best_rank <= 10 else 0.4 if best_rank <= 30 else 0.2 - expected_change = min(expected_change, 6.5) - - volume_ratio = _number(row.get("volume_ratio")) - turnover_rate = _number(row.get("turnover_rate")) - amount_million = _number(row.get("amount_million")) - confirmation = self._auction_confirmation(row) - actual_strength = _number(row.get("change")) + confirmation - label = self._expectation_label(actual_strength, expected_change) - is_broken = "昨日炸板" in candidate["sources"] and "昨日涨停" not in candidate["sources"] - identity = f"昨日{streak}板" if streak > 1 else "昨日首板" if streak == 1 else "昨日炸板" if is_broken else "人气榜标的" - popularity = ",双榜共识" if len(ranks) == 2 else ",热榜靠前" if ranks and min(ranks) <= 10 else "" - difference = _number(row.get("change")) - expected_change - direction = "高于" if difference > 0 else "低于" if difference < 0 else "贴合" - reason = ( - f"{identity}{popularity};竞价涨幅{direction}预期中枢" - f"{abs(difference):.1f}个百分点,量比{volume_ratio:.2f}" - ) - tags = sorted(core_tags.get(str(row.get("code") or ""), set())) - scored_row = { - **row, - "concepts": candidate["concepts"], - } - attention_score = self._attention_score( - scored_row, - expected_change, - tags, - candidate["sources"], - streak, - str(candidate.get("sector") or row.get("sector") or "") in strong_sector_names, - ) - normalized.append( - { - **scored_row, - "sector": candidate["sector"] if candidate["sector"] != "其他" else row.get("sector", "其他"), - "candidate_sources": candidate["sources"], - "source_label": " · ".join(candidate["sources"]), - "prior_streak": streak, - "concepts": candidate["concepts"], - "expected_change": round(expected_change, 2), - "actual_strength": round(actual_strength, 2), - "expectation": label, - "attention_score": attention_score, - "core_tags": tags, - "is_market_core": bool(tags), - "expectation_reason": reason, - } - ) - normalized.sort(key=lambda item: (_number(item.get("attention_score")), _number(item.get("amount_million"))), reverse=True) - matched_top = { - str(item.get("code") or "") - for item in sorted( - (item for item in normalized if item.get("expectation") == "符合预期"), - key=lambda item: _number(item.get("attention_score")), - reverse=True, - )[:20] - } - focus_candidates = [ - item for item in normalized - if item.get("is_market_core") - or (_number(item.get("attention_score")) >= 55 and item.get("expectation") != "符合预期") - or str(item.get("code") or "") in matched_top - ] - mandatory = [item for item in focus_candidates if item.get("is_market_core")] - mandatory_codes = {str(item.get("code") or "") for item in mandatory} - optional = [item for item in focus_candidates if str(item.get("code") or "") not in mandatory_codes] - focus_rows = sorted(mandatory, key=lambda item: _number(item.get("attention_score")), reverse=True) - focus_rows.extend(optional[:max(0, 30 - len(focus_rows))]) - focus_rows.sort(key=lambda item: _number(item.get("attention_score")), reverse=True) - return normalized, { - "baseline_date": _display_date(baseline_date), - "prior_limit_count": len(prior_limits), - "prior_broken_count": len(prior_broken), - "hot_candidate_count": sum( - any(source in {"同花顺热榜", "东方财富热榜"} for source in item["sources"]) - for item in candidates.values() - ), - "core_count": sum(bool(item.get("is_market_core")) for item in normalized), - "notice": ";".join(errors), - }, focus_rows - - @staticmethod - def _auction_theme_evidence( - prior_snapshot: dict[str, Any], - candidate_rows: list[dict[str, Any]], - ) -> dict[str, list[dict[str, Any]]]: - prior_sectors = list(prior_snapshot.get("sectors") or []) - carry = [] - for sector in prior_sectors[:10]: - name = str(sector.get("name") or "其他") - matched = [row for row in candidate_rows if str(row.get("sector") or "其他") == name] - changes = [_number(row.get("change")) for row in matched] - middle = median(changes) if changes else -10.0 - positive_rate = sum(value > 0.2 for value in changes) / len(changes) * 100 if changes else 0.0 - if middle >= 2 and positive_rate >= 60: - status = "强承接" - elif middle >= 0 and positive_rate >= 50: - status = "有承接" - elif middle > -2: - status = "分歧" - else: - status = "承接弱" - carry.append( - { - "name": name, - "status": status, - "prior_limit_count": int(_number(sector.get("count"))), - "leader": str(sector.get("leader") or "--"), - "matched_count": len(matched), - "median_change": round(middle, 2) if matched else None, - "positive_rate": round(positive_rate, 1), - "amount_million": round(sum(_number(row.get("amount_million")) for row in matched), 2), - } - ) - - concept_groups: dict[str, list[dict[str, Any]]] = {} - prior_names = {str(item.get("name") or "") for item in prior_sectors} - for row in candidate_rows: - for concept in row.get("concepts") or []: - if concept and concept not in prior_names: - concept_groups.setdefault(str(concept), []).append(row) - new_themes = [] - for name, members in concept_groups.items(): - unique = {str(item.get("code") or ""): item for item in members} - values = list(unique.values()) - changes = [_number(item.get("change")) for item in values] - if len(values) < 2 or median(changes) < 2 or sum(value > 0.2 for value in changes) / len(values) < 0.67: - continue - new_themes.append( - { - "name": name, - "stock_count": len(values), - "median_change": round(median(changes), 2), - "amount_million": round(sum(_number(item.get("amount_million")) for item in values), 2), - "leaders": [str(item.get("name") or "--") for item in sorted(values, key=lambda value: _number(value.get("change")), reverse=True)[:3]], - } - ) - new_themes.sort(key=lambda item: (item["stock_count"], item["median_change"], item["amount_million"]), reverse=True) - return {"carry": carry, "new_themes": new_themes[:8]} - - def _auction_amount_history(self, trade_date: str) -> list[dict[str, Any]]: - dates = self.database.auction_factor_dates(trade_date, 10) - stock_list_dates = { - str(item.get("ts_code") or ""): str(item.get("list_date") or "") - for item in self.database.list_stock_master() - if item.get("ts_code") - } - history = [] - for current_date in dates: - rows = [ - row for row in self.database.auction_factors_for_date(current_date) - if ( - str(row.get("ts_code") or "") in stock_list_dates - and ( - not stock_list_dates[str(row.get("ts_code") or "")] - or stock_list_dates[str(row.get("ts_code") or "")] < current_date - ) - ) - ] - history.append( - { - "trade_date": _display_date(current_date), - "amount_billion": round(sum(_number(row.get("amount")) for row in rows) / 100_000_000, 2), - "stock_count": len(rows), - } - ) - return history - - def _ensure_auction_amount_history(self, trade_date: str, target_days: int = 10) -> None: - existing = set(self.database.auction_factor_dates(trade_date, target_days + 5)) - if len(existing) >= target_days: - return - end = datetime.strptime(trade_date, "%Y%m%d") - start = (end - timedelta(days=35)).strftime("%Y%m%d") - try: - calendar = self.client.query( - "trade_cal", - { - "exchange": "SSE", - "start_date": start, - "end_date": trade_date, - "is_open": 1, - }, - "cal_date,is_open", - ) - except TushareError: - return - dates = sorted( - str(item.get("cal_date") or "") - for item in calendar - if int(_number(item.get("is_open"))) == 1 and item.get("cal_date") - )[-target_days:] - for current_date in dates: - if current_date in existing: - continue - try: - rows = self.client.query( - "stk_auction", - {"trade_date": current_date}, - "ts_code,trade_date,vol,price,amount,pre_close,turnover_rate,volume_ratio,float_share", - ) - except TushareError: - break - if rows: - self.database.upsert_auction_factors(rows) - existing.add(current_date) - - def _with_auction_watchlist( - self, - result: dict[str, Any], - trade_date: str, - user_id: int, - ) -> dict[str, Any]: - personalized = copy.deepcopy(result) - if not user_id: - personalized["watchlist_rows"] = [] - personalized["watchlist_missing_count"] = 0 - return personalized - watched = self.database.list_watchlist(user_id) - if not watched: - personalized["watchlist_rows"] = [] - personalized["watchlist_missing_count"] = 0 - return personalized - - public_rows = { - str(item.get("code") or ""): item - for item in ( - list(personalized.get("rows") or []) - + list(personalized.get("one_price_rows") or []) - ) - } - factors = { - str(item.get("ts_code") or "").split(".")[0]: item - for item in self.database.auction_factors_for_date(trade_date) - } - master = { - str(item.get("ts_code") or "").split(".")[0]: item - for item in self.database.list_stock_master() - } - rows = [] - missing = 0 - for item in watched: - code = str(item.get("code") or "") - if code in public_rows: - rows.append({**public_rows[code], "is_watchlist": True}) - continue - factor = factors.get(code) - if not factor: - missing += 1 - rows.append( - { - "code": code, - "name": str(item.get("name") or "--"), - "sector": str(item.get("sector") or "其他"), - "available": False, - "is_watchlist": True, - } - ) - continue - stock = master.get(code, {}) - price = _number(factor.get("price")) - pre_close = _number(factor.get("pre_close")) - change = (price / pre_close - 1) * 100 if price > 0 and pre_close > 0 else 0 - row = { - "code": code, - "ts_code": str(factor.get("ts_code") or ""), - "name": str(item.get("name") or stock.get("name") or "--"), - "sector": str(item.get("sector") or stock.get("industry") or "其他"), - "price": round(price, 2), - "pre_close": round(pre_close, 2), - "change": round(change, 2), - "amount_million": round(_number(factor.get("amount")) / 1_000_000, 2), - "turnover_rate": round(_number(factor.get("turnover_rate")), 4), - "volume_ratio": round(_number(factor.get("volume_ratio")), 2), - "candidate_sources": ["我的自选"], - "source_label": "我的自选", - "prior_streak": 0, - "concepts": [], - "expected_change": 0.0, - "core_tags": [], - "is_market_core": False, - "is_watchlist": True, - "available": True, - } - actual_strength = change + self._auction_confirmation(row) - row["actual_strength"] = round(actual_strength, 2) - row["expectation"] = self._expectation_label(actual_strength, 0.0) - row["attention_score"] = self._attention_score(row, 0.0, [], ["我的自选"], 0, False) - direction = "高于" if change > 0 else "低于" if change < 0 else "贴合" - row["expectation_reason"] = f"自选观察;竞价涨幅{direction}个人观察基准{abs(change):.1f}个百分点,量比{row['volume_ratio']:.2f}" - rows.append(row) - rows.sort( - key=lambda row: (bool(row.get("available", True)), _number(row.get("attention_score"))), - reverse=True, - ) - personalized["watchlist_rows"] = rows - personalized["watchlist_missing_count"] = missing - return personalized - - def _dynamic_auction_rows( - self, - trade_date: str, - baseline_date: str, - user_id: int, - ) -> list[dict[str, Any]]: - if not self.ifind or not self.ifind.configured: - return [] - master = self._stock_master() - placeholders = [ - { - "code": str(item.get("code") or ts_code.split(".")[0]), - "ts_code": ts_code, - "name": str(item.get("name") or "--"), - "sector": str(item.get("industry") or "其他"), - } - for ts_code, item in master.items() - ] - candidates, _, _ = self._auction_candidates(placeholders, baseline_date) - selected_codes = { - str(item.get("ts_code") or "") - for item in candidates - if item.get("ts_code") - } - if user_id: - watched = {str(item.get("code") or "") for item in self.database.list_watchlist(user_id)} - selected_codes.update( - ts_code for ts_code in master if ts_code.split(".")[0] in watched - ) - selected_codes.discard("") - if not selected_codes: - return [] - - display_date = _display_date(trade_date) - now = self._now_provider() - if now.tzinfo is None: - now = now.replace(tzinfo=CHINA_TIMEZONE) - else: - now = now.astimezone(CHINA_TIMEZONE) - end_time = min(now.time().replace(tzinfo=None), dt_time(9, 25)) - end_stamp = f"{display_date} {end_time.strftime('%H:%M:%S')}" - start_stamp = f"{display_date} 09:15:00" - snapshot_rows: list[dict[str, Any]] = [] - ordered_codes = sorted(selected_codes) - for index in range(0, len(ordered_codes), 80): - try: - snapshot_rows.extend( - self.ifind.snapshots( - ordered_codes[index:index + 80], - [ - "latest", "volume", "amount", "preClose", - "bid1", "bidSize1", "ask1", "askSize1", - ], - start_stamp, - end_stamp, - cache_ttl=8, - ) - ) - except IfindError: - continue - - latest: dict[str, dict[str, Any]] = {} - for row in snapshot_rows: - ts_code = str(row.get("thscode") or "") - previous = latest.get(ts_code) or {} - if ( - ts_code - and _number(row.get("latest")) > 0 - and str(row.get("time") or "") >= str(previous.get("time") or "") - ): - latest[ts_code] = row - prior_factors = { - str(item.get("ts_code") or ""): item - for item in self.database.auction_factors_for_date(baseline_date) - } - normalized = [] - for ts_code, row in latest.items(): - price = _number(row.get("latest")) - pre_close = _number(row.get("preClose")) - volume = _number(row.get("volume")) - bid_size = _number(row.get("bidSize1")) - ask_size = _number(row.get("askSize1")) - if volume <= 0 and bid_size > 0 and ask_size > 0: - volume = min(bid_size, ask_size) - amount = _number(row.get("amount")) - if amount <= 0 and price > 0 and volume > 0: - amount = price * volume - prior_volume = _number((prior_factors.get(ts_code) or {}).get("vol")) - normalized.append( - { - "ts_code": ts_code, - "trade_date": trade_date, - "vol": volume, - "price": price, - "amount": amount, - "pre_close": pre_close, - "turnover_rate": 0, - "volume_ratio": volume / prior_volume if prior_volume > 0 else 0, - "float_share": 0, - "bid_size1": bid_size, - "ask_size1": ask_size, - "snapshot_time": str(row.get("time") or ""), - "dynamic": True, - } - ) - return normalized - - def auction_center( - self, - requested_date: str, - force: bool = False, - user_id: int = 0, - ) -> dict[str, Any]: - trade_date, previous_date = self._trade_context(requested_date) - session = self._auction_session(requested_date, trade_date) - phase = str(session["phase"]) - ifind_ready = bool(self.ifind and self.ifind.configured) - live_dynamic = phase == "observing" and ifind_ready - use_ifind_snapshot = phase in {"observing", "selection", "finalized"} and ifind_ready - data_date = previous_date if phase == "pending" or (phase == "observing" and not live_dynamic) else trade_date - carried_forward = data_date != trade_date - cache_key = data_date - if not force and not live_dynamic: - cached = self.database.get_data_snapshot("auction_center_v6", cache_key) - if cached: - result = copy.deepcopy(cached) - result["meta"] = { - **result.get("meta", {}), - **session, - "requested_date": _display_date(requested_date), - "trade_date": _display_date(data_date), - "carried_forward": carried_forward, - "available": bool((result.get("summary") or {}).get("stock_count")), - "cached": True, - } - return self._with_auction_watchlist(result, data_date, user_id) - - if use_ifind_snapshot: - rows = self._dynamic_auction_rows(data_date, previous_date, user_id) - else: - rows = [] - if not rows and not live_dynamic: - try: - rows = self.client.query("stk_auction", {"trade_date": data_date}) - except TushareError: - rows = self.database.auction_factors_for_date(data_date) - if not rows: - return { - "meta": { - **session, - "requested_date": _display_date(requested_date), - "trade_date": _display_date(data_date), - "carried_forward": carried_forward, - "available": False, - "cached": False, - "notice": "该交易日暂无可用竞价快照", - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - }, - "summary": { - "stock_count": 0, "up_count": 0, "down_count": 0, - "limit_open_count": 0, "strong_open_count": 0, - "median_change": 0, "amount_billion": 0, - "candidate_count": 0, "focus_count": 0, "one_price_count": 0, - }, - "expectations": {"超预期": 0, "符合预期": 0, "低于预期": 0}, - "candidate_meta": {"baseline_date": _display_date(previous_date)}, - "themes": {"carry": [], "new_themes": []}, - "amount_history": self._auction_amount_history(data_date), - "news_feedback": {"available": False, "message": "隔夜消息反馈暂不可用"}, - "focus_rows": [], "one_price_rows": [], "rows": [], - "watchlist_rows": [], "watchlist_missing_count": 0, - } - - master = self._stock_master() - try: - limit_rows = self.client.query( - "stk_limit", - {"trade_date": data_date}, - "trade_date,ts_code,up_limit,down_limit", - ) - except TushareError: - limit_rows = [] - limit_map = {str(item.get("ts_code") or ""): item for item in limit_rows} - normalized = [] - for row in rows: - ts_code = str(row.get("ts_code") or "") - stock = master.get(ts_code) - price = _number(row.get("price")) - pre_close = _number(row.get("pre_close")) - list_date = str((stock or {}).get("list_date") or "") - if ( - not stock - or price <= 0 - or pre_close <= 0 - or (list_date and list_date >= data_date) - ): - continue - change = (price / pre_close - 1) * 100 - amount_million = _number(row.get("amount")) / 1_000_000 - volume_ratio = _number(row.get("volume_ratio")) - turnover_rate = _number(row.get("turnover_rate")) - up_limit = _number((limit_map.get(ts_code) or {}).get("up_limit")) - is_one_price = bool( - up_limit > 0 and abs(price - up_limit) <= max(0.001, up_limit * 0.00005) - ) - normalized.append( - { - "code": str(stock.get("code") or ts_code.split(".")[0]), - "ts_code": ts_code, - "name": str(stock.get("name") or "--"), - "sector": str(stock.get("industry") or "其他"), - "price": round(price, 2), - "pre_close": round(pre_close, 2), - "change": round(change, 2), - "volume_ten_thousand": round(_number(row.get("vol")) / 10_000, 2), - "amount_million": round(amount_million, 2), - "turnover_rate": round(turnover_rate, 4), - "volume_ratio": round(volume_ratio, 2), - "up_limit": round(up_limit, 2) if up_limit else None, - "is_one_price": is_one_price, - "signal": ( - "竞价涨停" if change >= 9.5 else - "强势高开" if change >= 3 else - "高开" if change > 0.2 else - "深度低开" if change <= -3 else - "低开" if change < -0.2 else "平开" - ), - } - ) - normalized.sort(key=lambda item: (item["amount_million"], item["volume_ratio"]), reverse=True) - self.database.upsert_auction_factors(rows) - changes = [item["change"] for item in normalized] - total = len(normalized) - _, baseline_date = self._trade_context(data_date) - candidates, candidate_meta, focus_rows = self._auction_candidates(normalized, baseline_date) - candidate_map = {str(item.get("code") or ""): item for item in candidates} - one_price_rows = [] - for row in normalized: - if not row.get("is_one_price"): - continue - enriched = candidate_map.get(str(row.get("code") or ""), {}) - one_price_rows.append( - { - **row, - **enriched, - "attention_score": None, - "expectation": "", - "expected_change": None, - "expectation_reason": "竞价价格封于当日涨停价,已从普通异动评分中隔离", - } - ) - one_price_codes = {str(item.get("code") or "") for item in one_price_rows} - candidates = [item for item in candidates if str(item.get("code") or "") not in one_price_codes] - focus_rows = [item for item in focus_rows if str(item.get("code") or "") not in one_price_codes] - one_price_rows.sort( - key=lambda item: ( - bool(item.get("is_market_core")), - _number(item.get("prior_streak")), - _number(item.get("amount_million")), - ), - reverse=True, - ) - expectations = { - label: sum(item.get("expectation") == label for item in candidates) - for label in ("超预期", "符合预期", "低于预期") - } - prior_snapshot = self.database.get_snapshot(baseline_date) or {} - themes = self._auction_theme_evidence(prior_snapshot, candidates + one_price_rows) - self._ensure_auction_amount_history(data_date) - amount_history = self._auction_amount_history(data_date) - prior_amounts = [item["amount_billion"] for item in amount_history[:-1]] - current_amount = round(sum(item["amount_million"] for item in normalized) / 100, 2) - previous_amount = prior_amounts[-1] if prior_amounts else 0 - five_day_amounts = prior_amounts[-5:] - five_day_average = sum(five_day_amounts) / len(five_day_amounts) if five_day_amounts else 0 - result = { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(data_date), - "carried_forward": carried_forward, - "available": bool(normalized), - **session, - "cached": False, - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - }, - "summary": { - "stock_count": total, - "up_count": sum(value > 0.2 for value in changes), - "down_count": sum(value < -0.2 for value in changes), - "limit_open_count": len(one_price_rows), - "strong_open_count": sum(value >= 3 for value in changes), - "median_change": round(median(changes), 2) if changes else 0, - "amount_billion": current_amount, - "amount_change_previous": round((current_amount / previous_amount - 1) * 100, 1) if previous_amount else None, - "amount_change_5d": round((current_amount / five_day_average - 1) * 100, 1) if five_day_average else None, - "candidate_count": len(candidates), - "focus_count": len(focus_rows), - "one_price_count": len(one_price_rows), - }, - "expectations": expectations, - "candidate_meta": candidate_meta, - "themes": themes, - "amount_history": amount_history, - "news_feedback": { - "available": False, - "message": "隔夜消息反馈暂不可用", - "detail": "待稳定的新闻与公告数据接入后开放", - }, - "focus_rows": focus_rows, - "one_price_rows": one_price_rows, - "rows": candidates, - } - if not live_dynamic: - self.database.save_data_snapshot("auction_center_v6", cache_key, "market", result) - return self._with_auction_watchlist(result, data_date, user_id) - - def _theme_directory(self) -> list[dict[str, Any]]: - cached = self.database.get_data_snapshot("theme_directory_v1", "ths") or {} - if cached.get("items"): - return list(cached["items"]) - rows = self.client.query( - "ths_index", {}, "ts_code,name,count,exchange,list_date,type" - ) - items = [ - { - "code": str(row.get("ts_code") or ""), - "name": str(row.get("name") or ""), - "member_count": int(_number(row.get("count"))), - "list_date": str(row.get("list_date") or ""), - } - for row in rows - if str(row.get("type") or "").upper() == "N" - and str(row.get("exchange") or "").upper() == "A" - and row.get("ts_code") - and row.get("name") - ] - self.database.save_data_snapshot( - "theme_directory_v1", "ths", "market", {"items": items} - ) - return items - - def theme_library(self, requested_date: str, force: bool = False) -> dict[str, Any]: - trade_date, previous_date = self._trade_context(requested_date) - if not force: - cached = self.database.get_data_snapshot("theme_library_v1", trade_date) - if cached: - result = copy.deepcopy(cached) - result["meta"] = {**result.get("meta", {}), "cached": True} - return result - - try: - daily = self.client.query( - "ths_daily", - {"trade_date": trade_date}, - "ts_code,trade_date,open,high,low,close,pre_close,pct_change,vol,turnover_rate", - ) - except TushareError: - fallback = self._latest_feature_snapshot("theme_library_v1", trade_date) - if fallback: - result = copy.deepcopy(fallback) - result["meta"] = { - **result.get("meta", {}), - "requested_date": _display_date(requested_date), - "carried_forward": True, - "cached": True, - "notice": "当前题材行情暂不可用,展示最近有效快照", - } - return result - daily = [] - actual_date = trade_date - carried_forward = False - if not daily and previous_date: - try: - daily = self.client.query( - "ths_daily", - {"trade_date": previous_date}, - "ts_code,trade_date,open,high,low,close,pre_close,pct_change,vol,turnover_rate", - ) - except TushareError: - daily = [] - actual_date = previous_date - carried_forward = bool(daily) - daily_map = {str(row.get("ts_code") or ""): row for row in daily} - try: - hot_rows = self.client.query("ths_hot", {"trade_date": actual_date}) - except TushareError: - hot_rows = [] - hot_map = { - str(row.get("ts_code") or ""): int(_number(row.get("rank"))) - for row in hot_rows - if str(row.get("data_type") or "") == "概念板块" - } - items = [] - for item in self._theme_directory(): - quote = daily_map.get(item["code"], {}) - items.append( - { - **item, - "change": round(_number(quote.get("pct_change")), 2), - "close": round(_number(quote.get("close")), 3), - "turnover_rate": round(_number(quote.get("turnover_rate")), 2), - "volume": round(_number(quote.get("vol")), 2), - "hot_rank": hot_map.get(item["code"]), - "has_quote": bool(quote), - } - ) - items.sort( - key=lambda item: ( - item["has_quote"], - item["hot_rank"] is not None, - -(item["hot_rank"] or 9999), - item["change"], - ), - reverse=True, - ) - quoted = [item for item in items if item["has_quote"]] - result = { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(actual_date), - "carried_forward": carried_forward, - "cached": False, - "notice": "" if quoted else "该交易日暂无题材行情,已保留题材目录", - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - }, - "summary": { - "theme_count": len(items), - "quoted_count": len(quoted), - "up_count": sum(item["change"] > 0 for item in quoted), - "down_count": sum(item["change"] < 0 for item in quoted), - "hot_count": len(hot_map), - }, - "items": items, - } - self.database.save_data_snapshot("theme_library_v1", trade_date, "market", result) - return result - - def theme_detail(self, code: str, requested_date: str) -> dict[str, Any]: - code = str(code or "").strip().upper() - library = self.theme_library(requested_date) - theme = next((item for item in library["items"] if item["code"] == code), None) - if not theme: - raise ValueError("未找到对应题材。") - actual_date = str(library["meta"]["trade_date"]).replace("-", "") - detail_key = f"{actual_date}:{code}" - cached_detail = self.database.get_data_snapshot("theme_detail_v1", detail_key) - if cached_detail: - return cached_detail - try: - members = self.client.query( - "ths_member", {"ts_code": code, "is_new": "Y"}, "ts_code,con_code,con_name" - ) - except TushareError: - members = [] - bars = self.database.daily_bars_for_date(actual_date) - if not bars: - bars = self.client.query( - "daily", - {"trade_date": actual_date}, - "ts_code,trade_date,open,high,low,close,pct_chg,vol,amount", - ) - self.database.upsert_daily_bars(bars) - bar_map = {str(row.get("ts_code") or ""): row for row in bars} - normalized_members = [] - for member in members: - ts_code = str(member.get("con_code") or "") - quote = bar_map.get(ts_code, {}) - normalized_members.append( - { - "code": ts_code.split(".")[0], - "ts_code": ts_code, - "name": str(member.get("con_name") or "--"), - "price": round(_number(quote.get("close")), 2), - "change": round(_number(quote.get("pct_chg")), 2), - "amount_billion": round(_number(quote.get("amount")) / 100_000, 2), - "has_quote": bool(quote), - } - ) - normalized_members.sort( - key=lambda item: (item["has_quote"], item["change"], item["amount_billion"]), - reverse=True, - ) - end = datetime.strptime(actual_date, "%Y%m%d") - try: - history = self.client.query( - "ths_daily", - { - "ts_code": code, - "start_date": (end - timedelta(days=190)).strftime("%Y%m%d"), - "end_date": actual_date, - }, - "ts_code,trade_date,open,high,low,close,pct_change,vol,turnover_rate", - ) - except TushareError: - history = [] - history.sort(key=lambda row: str(row.get("trade_date") or "")) - series = [ - { - "trade_date": _display_date(str(row.get("trade_date") or "")), - "open": _number(row.get("open")), - "high": _number(row.get("high")), - "low": _number(row.get("low")), - "close": _number(row.get("close")), - "change": _number(row.get("pct_change")), - "volume": _number(row.get("vol")), - } - for row in history[-90:] - ] - result = { - "meta": { - "trade_date": _display_date(actual_date), - "notice": "" if members or history else "题材成分与走势暂不可用", - }, - "theme": theme, - "series": series, - "members": normalized_members, - "summary": { - "member_count": len(normalized_members), - "up_count": sum(item["change"] > 0 for item in normalized_members if item["has_quote"]), - "down_count": sum(item["change"] < 0 for item in normalized_members if item["has_quote"]), - "quoted_count": sum(item["has_quote"] for item in normalized_members), - }, - } - if members or history: - self.database.save_data_snapshot("theme_detail_v1", detail_key, "market", result) - return result - - @staticmethod - def _parse_concepts(value: Any) -> list[str]: - if isinstance(value, list): - return [str(item) for item in value if str(item).strip()] - text = str(value or "").strip() - if not text: - return [] - try: - parsed = json.loads(text) - if isinstance(parsed, list): - return [str(item) for item in parsed if str(item).strip()] - except json.JSONDecodeError: - pass - return [part.strip() for part in text.split(",") if part.strip()] - - def popularity(self, requested_date: str, force: bool = False) -> dict[str, Any]: - trade_date, previous_date = self._trade_context(requested_date) - if not force: - cached = self.database.get_data_snapshot("popularity_v1", trade_date) - if cached: - result = copy.deepcopy(cached) - result["meta"] = {**result.get("meta", {}), "cached": True} - return result - - ths_rows, dc_rows, errors = self._hot_rows(trade_date) - actual_date = trade_date - carried_forward = False - if not ths_rows and not dc_rows and previous_date: - ths_rows, dc_rows, errors = self._hot_rows(previous_date) - actual_date = previous_date - carried_forward = bool(ths_rows or dc_rows) - if not ths_rows and not dc_rows: - fallback = self._latest_feature_snapshot("popularity_v1", trade_date) - if fallback: - result = copy.deepcopy(fallback) - result["meta"] = { - **result.get("meta", {}), - "requested_date": _display_date(requested_date), - "carried_forward": True, - "cached": True, - "notice": "当前榜单暂不可用,展示最近有效快照", - } - return result - return { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(trade_date), - "previous_trade_date": _display_date(previous_date), - "carried_forward": False, - "cached": False, - "notice": "该交易日暂无可用人气榜", - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - }, - "summary": {"ths_count": 0, "dc_count": 0, "dual_count": 0}, - "combined": [], "ths": [], "dc": [], - } - - prior_request = (datetime.strptime(actual_date, "%Y%m%d") - timedelta(days=1)).strftime("%Y%m%d") - prior_date, _ = self._trade_context(prior_request) - previous_ths, previous_dc, _ = self._hot_rows(prior_date) - ths = self._normalize_hot(ths_rows, "热股", previous_ths) - dc = self._normalize_hot(dc_rows, "A股市场", previous_dc) - ths_map = {item["ts_code"]: item for item in ths} - dc_map = {item["ts_code"]: item for item in dc} - combined = [] - for ts_code in set(ths_map) | set(dc_map): - ths_item = ths_map.get(ts_code) - dc_item = dc_map.get(ts_code) - base = ths_item or dc_item or {} - ths_rank = int(ths_item["rank"]) if ths_item else None - dc_rank = int(dc_item["rank"]) if dc_item else None - score = ( - (101 - (ths_rank or 101)) * 0.5 - + (201 - (dc_rank or 201)) * 0.25 - ) - combined.append( - { - **base, - "ths_rank": ths_rank, - "dc_rank": dc_rank, - "score": round(score, 2), - "dual_source": bool(ths_item and dc_item), - "concepts": (ths_item or {}).get("concepts") or [], - } - ) - combined.sort(key=lambda item: (item["dual_source"], item["score"]), reverse=True) - for index, item in enumerate(combined, 1): - item["rank"] = index - result = { - "meta": { - "requested_date": _display_date(requested_date), - "trade_date": _display_date(actual_date), - "previous_trade_date": _display_date(prior_date), - "carried_forward": carried_forward, - "cached": False, - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - "notice": ";".join(errors), - }, - "summary": { - "ths_count": len(ths), - "dc_count": len(dc), - "dual_count": sum(item["dual_source"] for item in combined), - }, - "combined": combined[:200], - "ths": ths, - "dc": dc, - } - self.database.save_data_snapshot("popularity_v1", trade_date, "market", result) - return result - - def _hot_rows(self, trade_date: str) -> tuple[list[dict[str, Any]], list[dict[str, Any]], list[str]]: - errors = [] - try: - ths = self.client.query("ths_hot", {"trade_date": trade_date}) - except TushareError: - ths = [] - errors.append("同花顺榜单暂不可用") - try: - dc = self.client.query("dc_hot", {"trade_date": trade_date}) - except TushareError: - dc = [] - errors.append("东方财富榜单暂不可用") - return ths, dc, errors - - def _normalize_hot( - self, - rows: list[dict[str, Any]], - data_type: str, - previous_rows: list[dict[str, Any]], - ) -> list[dict[str, Any]]: - previous = { - str(row.get("ts_code") or ""): int(_number(row.get("rank"))) - for row in previous_rows - if str(row.get("data_type") or "") == data_type - } - items = [] - for row in rows: - if str(row.get("data_type") or "") != data_type: - continue - rank = int(_number(row.get("rank"))) - ts_code = str(row.get("ts_code") or "") - prior_rank = previous.get(ts_code) - items.append( - { - "rank": rank, - "ts_code": ts_code, - "code": ts_code.split(".")[0], - "name": str(row.get("ts_name") or "--"), - "change": round(_number(row.get("pct_change")), 2), - "price": round(_number(row.get("current_price")), 2), - "hot": round(_number(row.get("hot")), 1), - "rank_change": (prior_rank - rank) if prior_rank else None, - "concepts": self._parse_concepts(row.get("concept")), - "reason": str(row.get("rank_reason") or ""), - "rank_time": str(row.get("rank_time") or ""), - } - ) - items.sort(key=lambda item: item["rank"]) - return items + pass diff --git a/backend/features/market/insights_auction.py b/backend/features/market/insights_auction.py new file mode 100644 index 0000000..c7bb675 --- /dev/null +++ b/backend/features/market/insights_auction.py @@ -0,0 +1,221 @@ +from __future__ import annotations + +import copy +from datetime import datetime +from statistics import median +from typing import Any + +from backend.data.numbers import non_nan_number as _number +from backend.data.providers.tushare_client import TushareError +from backend.features.market.insights_context import _display_date + + +class MarketAuctionInsightsMixin: + def auction_center( + self, + requested_date: str, + force: bool = False, + user_id: int = 0, + ) -> dict[str, Any]: + trade_date, previous_date = self._trade_context(requested_date) + session = self._auction_session(requested_date, trade_date) + phase = str(session["phase"]) + ifind_ready = bool(self.ifind and self.ifind.configured) + live_dynamic = phase == "observing" and ifind_ready + use_ifind_snapshot = phase in {"observing", "selection", "finalized"} and ifind_ready + data_date = previous_date if phase == "pending" or (phase == "observing" and not live_dynamic) else trade_date + carried_forward = data_date != trade_date + cache_key = data_date + if not force and not live_dynamic: + cached = self.database.get_data_snapshot("auction_center_v6", cache_key) + if cached: + result = copy.deepcopy(cached) + result["meta"] = { + **result.get("meta", {}), + **session, + "requested_date": _display_date(requested_date), + "trade_date": _display_date(data_date), + "carried_forward": carried_forward, + "available": bool((result.get("summary") or {}).get("stock_count")), + "cached": True, + } + return self._with_auction_watchlist(result, data_date, user_id) + + if use_ifind_snapshot: + rows = self._dynamic_auction_rows(data_date, previous_date, user_id) + else: + rows = [] + if not rows and not live_dynamic: + try: + rows = self.client.query("stk_auction", {"trade_date": data_date}) + except TushareError: + rows = self.database.auction_factors_for_date(data_date) + if not rows: + return { + "meta": { + **session, + "requested_date": _display_date(requested_date), + "trade_date": _display_date(data_date), + "carried_forward": carried_forward, + "available": False, + "cached": False, + "notice": "该交易日暂无可用竞价快照", + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + }, + "summary": { + "stock_count": 0, "up_count": 0, "down_count": 0, + "limit_open_count": 0, "strong_open_count": 0, + "median_change": 0, "amount_billion": 0, + "candidate_count": 0, "focus_count": 0, "one_price_count": 0, + }, + "expectations": {"超预期": 0, "符合预期": 0, "低于预期": 0}, + "candidate_meta": {"baseline_date": _display_date(previous_date)}, + "themes": {"carry": [], "new_themes": []}, + "amount_history": self._auction_amount_history(data_date), + "news_feedback": {"available": False, "message": "隔夜消息反馈暂不可用"}, + "focus_rows": [], "one_price_rows": [], "rows": [], + "watchlist_rows": [], "watchlist_missing_count": 0, + } + + master = self._stock_master() + try: + limit_rows = self.client.query( + "stk_limit", + {"trade_date": data_date}, + "trade_date,ts_code,up_limit,down_limit", + ) + except TushareError: + limit_rows = [] + limit_map = {str(item.get("ts_code") or ""): item for item in limit_rows} + normalized = [] + for row in rows: + ts_code = str(row.get("ts_code") or "") + stock = master.get(ts_code) + price = _number(row.get("price")) + pre_close = _number(row.get("pre_close")) + list_date = str((stock or {}).get("list_date") or "") + if ( + not stock + or price <= 0 + or pre_close <= 0 + or (list_date and list_date >= data_date) + ): + continue + change = (price / pre_close - 1) * 100 + amount_million = _number(row.get("amount")) / 1_000_000 + volume_ratio = _number(row.get("volume_ratio")) + turnover_rate = _number(row.get("turnover_rate")) + up_limit = _number((limit_map.get(ts_code) or {}).get("up_limit")) + is_one_price = bool( + up_limit > 0 and abs(price - up_limit) <= max(0.001, up_limit * 0.00005) + ) + normalized.append( + { + "code": str(stock.get("code") or ts_code.split(".")[0]), + "ts_code": ts_code, + "name": str(stock.get("name") or "--"), + "sector": str(stock.get("industry") or "其他"), + "price": round(price, 2), + "pre_close": round(pre_close, 2), + "change": round(change, 2), + "volume_ten_thousand": round(_number(row.get("vol")) / 10_000, 2), + "amount_million": round(amount_million, 2), + "turnover_rate": round(turnover_rate, 4), + "volume_ratio": round(volume_ratio, 2), + "up_limit": round(up_limit, 2) if up_limit else None, + "is_one_price": is_one_price, + "signal": ( + "竞价涨停" if change >= 9.5 else + "强势高开" if change >= 3 else + "高开" if change > 0.2 else + "深度低开" if change <= -3 else + "低开" if change < -0.2 else "平开" + ), + } + ) + normalized.sort(key=lambda item: (item["amount_million"], item["volume_ratio"]), reverse=True) + self.database.upsert_auction_factors(rows) + changes = [item["change"] for item in normalized] + total = len(normalized) + _, baseline_date = self._trade_context(data_date) + candidates, candidate_meta, focus_rows = self._auction_candidates(normalized, baseline_date) + candidate_map = {str(item.get("code") or ""): item for item in candidates} + one_price_rows = [] + for row in normalized: + if not row.get("is_one_price"): + continue + enriched = candidate_map.get(str(row.get("code") or ""), {}) + one_price_rows.append( + { + **row, + **enriched, + "attention_score": None, + "expectation": "", + "expected_change": None, + "expectation_reason": "竞价价格封于当日涨停价,已从普通异动评分中隔离", + } + ) + one_price_codes = {str(item.get("code") or "") for item in one_price_rows} + candidates = [item for item in candidates if str(item.get("code") or "") not in one_price_codes] + focus_rows = [item for item in focus_rows if str(item.get("code") or "") not in one_price_codes] + one_price_rows.sort( + key=lambda item: ( + bool(item.get("is_market_core")), + _number(item.get("prior_streak")), + _number(item.get("amount_million")), + ), + reverse=True, + ) + expectations = { + label: sum(item.get("expectation") == label for item in candidates) + for label in ("超预期", "符合预期", "低于预期") + } + prior_snapshot = self.database.get_snapshot(baseline_date) or {} + themes = self._auction_theme_evidence(prior_snapshot, candidates + one_price_rows) + self._ensure_auction_amount_history(data_date) + amount_history = self._auction_amount_history(data_date) + prior_amounts = [item["amount_billion"] for item in amount_history[:-1]] + current_amount = round(sum(item["amount_million"] for item in normalized) / 100, 2) + previous_amount = prior_amounts[-1] if prior_amounts else 0 + five_day_amounts = prior_amounts[-5:] + five_day_average = sum(five_day_amounts) / len(five_day_amounts) if five_day_amounts else 0 + result = { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(data_date), + "carried_forward": carried_forward, + "available": bool(normalized), + **session, + "cached": False, + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + }, + "summary": { + "stock_count": total, + "up_count": sum(value > 0.2 for value in changes), + "down_count": sum(value < -0.2 for value in changes), + "limit_open_count": len(one_price_rows), + "strong_open_count": sum(value >= 3 for value in changes), + "median_change": round(median(changes), 2) if changes else 0, + "amount_billion": current_amount, + "amount_change_previous": round((current_amount / previous_amount - 1) * 100, 1) if previous_amount else None, + "amount_change_5d": round((current_amount / five_day_average - 1) * 100, 1) if five_day_average else None, + "candidate_count": len(candidates), + "focus_count": len(focus_rows), + "one_price_count": len(one_price_rows), + }, + "expectations": expectations, + "candidate_meta": candidate_meta, + "themes": themes, + "amount_history": amount_history, + "news_feedback": { + "available": False, + "message": "隔夜消息反馈暂不可用", + "detail": "待稳定的新闻与公告数据接入后开放", + }, + "focus_rows": focus_rows, + "one_price_rows": one_price_rows, + "rows": candidates, + } + if not live_dynamic: + self.database.save_data_snapshot("auction_center_v6", cache_key, "market", result) + return self._with_auction_watchlist(result, data_date, user_id) diff --git a/backend/features/market/insights_auction_data.py b/backend/features/market/insights_auction_data.py new file mode 100644 index 0000000..d55a394 --- /dev/null +++ b/backend/features/market/insights_auction_data.py @@ -0,0 +1,318 @@ +from __future__ import annotations + +import copy +from datetime import datetime, time as dt_time, timedelta +from typing import Any + +from backend.data.numbers import non_nan_number as _number +from backend.data.providers.ifind_client import IfindError +from backend.data.providers.tushare_client import TushareError +from backend.features.market.insights_context import CHINA_TIMEZONE, _display_date + + +class MarketAuctionDataMixin: + def _auction_session(self, requested_date: str, trade_date: str) -> dict[str, Any]: + now = self._now_provider() + if now.tzinfo is None: + now = now.replace(tzinfo=CHINA_TIMEZONE) + else: + now = now.astimezone(CHINA_TIMEZONE) + requested = str(requested_date or "").replace("-", "") + today = now.strftime("%Y%m%d") + if requested != today or trade_date != today: + return { + "phase": "archive", + "actionable": False, + "next_transition_at": "", + } + + local_time = now.time().replace(tzinfo=None) + transitions = ( + (dt_time(9, 15), "pending", dt_time(9, 15)), + (dt_time(9, 25), "observing", dt_time(9, 25)), + (dt_time(9, 30), "selection", dt_time(9, 30)), + ) + for boundary, phase, next_boundary in transitions: + if local_time < boundary: + transition = now.replace( + hour=next_boundary.hour, + minute=next_boundary.minute, + second=0, + microsecond=0, + ) + return { + "phase": phase, + "actionable": phase == "selection", + "next_transition_at": transition.isoformat(timespec="seconds"), + } + return { + "phase": "finalized", + "actionable": False, + "next_transition_at": "", + } + + def _auction_amount_history(self, trade_date: str) -> list[dict[str, Any]]: + dates = self.database.auction_factor_dates(trade_date, 10) + stock_list_dates = { + str(item.get("ts_code") or ""): str(item.get("list_date") or "") + for item in self.database.list_stock_master() + if item.get("ts_code") + } + history = [] + for current_date in dates: + rows = [ + row for row in self.database.auction_factors_for_date(current_date) + if ( + str(row.get("ts_code") or "") in stock_list_dates + and ( + not stock_list_dates[str(row.get("ts_code") or "")] + or stock_list_dates[str(row.get("ts_code") or "")] < current_date + ) + ) + ] + history.append( + { + "trade_date": _display_date(current_date), + "amount_billion": round(sum(_number(row.get("amount")) for row in rows) / 100_000_000, 2), + "stock_count": len(rows), + } + ) + return history + + def _ensure_auction_amount_history(self, trade_date: str, target_days: int = 10) -> None: + existing = set(self.database.auction_factor_dates(trade_date, target_days + 5)) + if len(existing) >= target_days: + return + end = datetime.strptime(trade_date, "%Y%m%d") + start = (end - timedelta(days=35)).strftime("%Y%m%d") + try: + calendar = self.client.query( + "trade_cal", + { + "exchange": "SSE", + "start_date": start, + "end_date": trade_date, + "is_open": 1, + }, + "cal_date,is_open", + ) + except TushareError: + return + dates = sorted( + str(item.get("cal_date") or "") + for item in calendar + if int(_number(item.get("is_open"))) == 1 and item.get("cal_date") + )[-target_days:] + for current_date in dates: + if current_date in existing: + continue + try: + rows = self.client.query( + "stk_auction", + {"trade_date": current_date}, + "ts_code,trade_date,vol,price,amount,pre_close,turnover_rate,volume_ratio,float_share", + ) + except TushareError: + break + if rows: + self.database.upsert_auction_factors(rows) + existing.add(current_date) + + def _with_auction_watchlist( + self, + result: dict[str, Any], + trade_date: str, + user_id: int, + ) -> dict[str, Any]: + personalized = copy.deepcopy(result) + if not user_id: + personalized["watchlist_rows"] = [] + personalized["watchlist_missing_count"] = 0 + return personalized + watched = self.database.list_watchlist(user_id) + if not watched: + personalized["watchlist_rows"] = [] + personalized["watchlist_missing_count"] = 0 + return personalized + + public_rows = { + str(item.get("code") or ""): item + for item in ( + list(personalized.get("rows") or []) + + list(personalized.get("one_price_rows") or []) + ) + } + factors = { + str(item.get("ts_code") or "").split(".")[0]: item + for item in self.database.auction_factors_for_date(trade_date) + } + master = { + str(item.get("ts_code") or "").split(".")[0]: item + for item in self.database.list_stock_master() + } + rows = [] + missing = 0 + for item in watched: + code = str(item.get("code") or "") + if code in public_rows: + rows.append({**public_rows[code], "is_watchlist": True}) + continue + factor = factors.get(code) + if not factor: + missing += 1 + rows.append( + { + "code": code, + "name": str(item.get("name") or "--"), + "sector": str(item.get("sector") or "其他"), + "available": False, + "is_watchlist": True, + } + ) + continue + stock = master.get(code, {}) + price = _number(factor.get("price")) + pre_close = _number(factor.get("pre_close")) + change = (price / pre_close - 1) * 100 if price > 0 and pre_close > 0 else 0 + row = { + "code": code, + "ts_code": str(factor.get("ts_code") or ""), + "name": str(item.get("name") or stock.get("name") or "--"), + "sector": str(item.get("sector") or stock.get("industry") or "其他"), + "price": round(price, 2), + "pre_close": round(pre_close, 2), + "change": round(change, 2), + "amount_million": round(_number(factor.get("amount")) / 1_000_000, 2), + "turnover_rate": round(_number(factor.get("turnover_rate")), 4), + "volume_ratio": round(_number(factor.get("volume_ratio")), 2), + "candidate_sources": ["我的自选"], + "source_label": "我的自选", + "prior_streak": 0, + "concepts": [], + "expected_change": 0.0, + "core_tags": [], + "is_market_core": False, + "is_watchlist": True, + "available": True, + } + actual_strength = change + self._auction_confirmation(row) + row["actual_strength"] = round(actual_strength, 2) + row["expectation"] = self._expectation_label(actual_strength, 0.0) + row["attention_score"] = self._attention_score(row, 0.0, [], ["我的自选"], 0, False) + direction = "高于" if change > 0 else "低于" if change < 0 else "贴合" + row["expectation_reason"] = f"自选观察;竞价涨幅{direction}个人观察基准{abs(change):.1f}个百分点,量比{row['volume_ratio']:.2f}" + rows.append(row) + rows.sort( + key=lambda row: (bool(row.get("available", True)), _number(row.get("attention_score"))), + reverse=True, + ) + personalized["watchlist_rows"] = rows + personalized["watchlist_missing_count"] = missing + return personalized + + def _dynamic_auction_rows( + self, + trade_date: str, + baseline_date: str, + user_id: int, + ) -> list[dict[str, Any]]: + if not self.ifind or not self.ifind.configured: + return [] + master = self._stock_master() + placeholders = [ + { + "code": str(item.get("code") or ts_code.split(".")[0]), + "ts_code": ts_code, + "name": str(item.get("name") or "--"), + "sector": str(item.get("industry") or "其他"), + } + for ts_code, item in master.items() + ] + candidates, _, _ = self._auction_candidates(placeholders, baseline_date) + selected_codes = { + str(item.get("ts_code") or "") + for item in candidates + if item.get("ts_code") + } + if user_id: + watched = {str(item.get("code") or "") for item in self.database.list_watchlist(user_id)} + selected_codes.update( + ts_code for ts_code in master if ts_code.split(".")[0] in watched + ) + selected_codes.discard("") + if not selected_codes: + return [] + + display_date = _display_date(trade_date) + now = self._now_provider() + if now.tzinfo is None: + now = now.replace(tzinfo=CHINA_TIMEZONE) + else: + now = now.astimezone(CHINA_TIMEZONE) + end_time = min(now.time().replace(tzinfo=None), dt_time(9, 25)) + end_stamp = f"{display_date} {end_time.strftime('%H:%M:%S')}" + start_stamp = f"{display_date} 09:15:00" + snapshot_rows: list[dict[str, Any]] = [] + ordered_codes = sorted(selected_codes) + for index in range(0, len(ordered_codes), 80): + try: + snapshot_rows.extend( + self.ifind.snapshots( + ordered_codes[index:index + 80], + [ + "latest", "volume", "amount", "preClose", + "bid1", "bidSize1", "ask1", "askSize1", + ], + start_stamp, + end_stamp, + cache_ttl=8, + ) + ) + except IfindError: + continue + + latest: dict[str, dict[str, Any]] = {} + for row in snapshot_rows: + ts_code = str(row.get("thscode") or "") + previous = latest.get(ts_code) or {} + if ( + ts_code + and _number(row.get("latest")) > 0 + and str(row.get("time") or "") >= str(previous.get("time") or "") + ): + latest[ts_code] = row + prior_factors = { + str(item.get("ts_code") or ""): item + for item in self.database.auction_factors_for_date(baseline_date) + } + normalized = [] + for ts_code, row in latest.items(): + price = _number(row.get("latest")) + pre_close = _number(row.get("preClose")) + volume = _number(row.get("volume")) + bid_size = _number(row.get("bidSize1")) + ask_size = _number(row.get("askSize1")) + if volume <= 0 and bid_size > 0 and ask_size > 0: + volume = min(bid_size, ask_size) + amount = _number(row.get("amount")) + if amount <= 0 and price > 0 and volume > 0: + amount = price * volume + prior_volume = _number((prior_factors.get(ts_code) or {}).get("vol")) + normalized.append( + { + "ts_code": ts_code, + "trade_date": trade_date, + "vol": volume, + "price": price, + "amount": amount, + "pre_close": pre_close, + "turnover_rate": 0, + "volume_ratio": volume / prior_volume if prior_volume > 0 else 0, + "float_share": 0, + "bid_size1": bid_size, + "ask_size1": ask_size, + "snapshot_time": str(row.get("time") or ""), + "dynamic": True, + } + ) + return normalized diff --git a/backend/features/market/insights_auction_scoring.py b/backend/features/market/insights_auction_scoring.py new file mode 100644 index 0000000..e1e4f09 --- /dev/null +++ b/backend/features/market/insights_auction_scoring.py @@ -0,0 +1,355 @@ +from __future__ import annotations + +from statistics import median +from typing import Any + +from backend.data.numbers import non_nan_number as _number +from backend.features.market.insights_context import _display_date + + +class MarketAuctionScoringMixin: + @staticmethod + def _expectation_label(actual_strength: float, expected_change: float) -> str: + difference = actual_strength - expected_change + if difference >= 1.5: + return "超预期" + if difference <= -1.5: + return "低于预期" + return "符合预期" + + @staticmethod + def _auction_confirmation(row: dict[str, Any]) -> float: + volume_ratio = _number(row.get("volume_ratio")) + turnover_rate = _number(row.get("turnover_rate")) + amount_million = _number(row.get("amount_million")) + return ( + (0.6 if volume_ratio >= 2 else 0.3 if volume_ratio >= 1.2 else -0.5 if volume_ratio < 0.6 else 0) + + (0.25 if turnover_rate >= 0.15 else -0.25 if turnover_rate < 0.03 else 0) + + (0.3 if amount_million >= 20 else 0.15 if amount_million >= 5 else -0.3 if amount_million < 1 else 0) + ) + + @staticmethod + def _attention_score( + row: dict[str, Any], + expected_change: float, + core_tags: list[str], + sources: list[str], + prior_streak: int, + strong_sector: bool, + ) -> float: + if core_tags: + identity_score = 35.0 + elif prior_streak >= 2: + identity_score = 27.0 + elif any(source in {"昨日涨停", "昨日炸板"} for source in sources): + identity_score = 21.0 + else: + identity_score = 14.0 + deviation_score = min(30.0, abs(_number(row.get("change")) - expected_change) * 5) + volume_score = min(10.0, max(0.0, _number(row.get("volume_ratio"))) / 2 * 10) + amount_score = min(6.0, max(0.0, _number(row.get("amount_million"))) / 10 * 6) + turnover_score = min(4.0, max(0.0, _number(row.get("turnover_rate"))) / 0.2 * 4) + theme_score = 15.0 if strong_sector else 7.0 if row.get("concepts") else 0.0 + return round(min(100.0, identity_score + deviation_score + volume_score + amount_score + turnover_score + theme_score), 1) + + def _auction_candidates( + self, + rows: list[dict[str, Any]], + baseline_date: str, + ) -> tuple[list[dict[str, Any]], dict[str, Any], list[dict[str, Any]]]: + """Build a narrow, explainable universe from prior limits, breaks and top-20 hot lists.""" + snapshot = self.database.get_snapshot(baseline_date) or {} + prior_limits = list(snapshot.get("limits") or []) + prior_broken = list(snapshot.get("broken") or []) + prior_sectors = list(snapshot.get("sectors") or []) + strong_sector_names = { + str(item.get("name") or "") for item in prior_sectors[:5] if item.get("name") + } + ths_rows, dc_rows, errors = self._hot_rows(baseline_date) + candidates: dict[str, dict[str, Any]] = {} + core_tags: dict[str, set[str]] = {} + + def ensure_candidate(item: dict[str, Any]) -> dict[str, Any] | None: + code = str(item.get("code") or str(item.get("ts_code") or "").split(".")[0]) + if not code: + return None + return candidates.setdefault( + code, + { + "sources": [], + "streak": 0, + "sector": str(item.get("sector") or "其他"), + "name": str(item.get("name") or item.get("ts_name") or "--"), + "concepts": [], + "ths_rank": None, + "dc_rank": None, + }, + ) + + for item in prior_limits: + candidate = ensure_candidate(item) + if candidate is None: + continue + candidate["sources"].append("昨日涨停") + candidate["streak"] = max(1, int(_number(item.get("streak"), 1))) + + for item in prior_broken: + candidate = ensure_candidate(item) + if candidate is not None and "昨日炸板" not in candidate["sources"]: + candidate["sources"].append("昨日炸板") + + limit_streaks = [max(1, int(_number(item.get("streak"), 1))) for item in prior_limits] + highest_streak = max(limit_streaks, default=0) + for item in prior_limits: + code = str(item.get("code") or "") + streak = max(1, int(_number(item.get("streak"), 1))) + if streak >= 3: + core_tags.setdefault(code, set()).add("三板以上") + if highest_streak and streak == highest_streak: + core_tags.setdefault(code, set()).add("市场最高板") + + for sector in prior_sectors[:5]: + name = str(sector.get("name") or "") + members = [item for item in prior_limits if str(item.get("sector") or "其他") == name] + if not members: + continue + leader = max( + members, + key=lambda item: ( + int(_number(item.get("streak"), 1)), + _number(item.get("amount_billion")), + -_number(item.get("open_times")), + ), + ) + core_tags.setdefault(str(leader.get("code") or ""), set()).add("题材核心") + + leadership = sorted( + prior_limits, + key=lambda item: ( + int(_number(item.get("streak"), 1)), + str(item.get("sector") or "") in strong_sector_names, + _number(item.get("amount_billion")), + ), + reverse=True, + ) + if leadership: + core_tags.setdefault(str(leadership[0].get("code") or ""), set()).add("市场领涨") + + hot_records: dict[str, dict[str, Any]] = {} + + for source, hot_rows, data_type in ( + ("同花顺热榜", ths_rows, "热股"), + ("东方财富热榜", dc_rows, "A股市场"), + ): + for item in hot_rows: + if str(item.get("data_type") or "") != data_type: + continue + ts_code = str(item.get("ts_code") or "") + code = ts_code.split(".")[0] + rank = max(1, int(_number(item.get("rank"), 9999))) + if not code or rank > 20: + continue + hot = hot_records.setdefault( + code, + { + "name": str(item.get("ts_name") or "--"), + "concepts": [], + "ths_rank": None, + "dc_rank": None, + }, + ) + hot["ths_rank" if source == "同花顺热榜" else "dc_rank"] = rank + if source == "同花顺热榜": + hot["concepts"] = self._parse_concepts(item.get("concept")) + + ranked_hot = sorted( + hot_records.items(), + key=lambda pair: ( + ((21 - (pair[1].get("ths_rank") or 21)) / 20) + + ((21 - (pair[1].get("dc_rank") or 21)) / 20) + + (0.35 if pair[1].get("ths_rank") and pair[1].get("dc_rank") else 0) + ), + reverse=True, + ) + for code, _ in ranked_hot[:5]: + core_tags.setdefault(code, set()).add("人气前5") + + for code, hot in hot_records.items(): + ranks = [rank for rank in (hot.get("ths_rank"), hot.get("dc_rank")) if isinstance(rank, int)] + dual = len(ranks) == 2 + if not ranks or (min(ranks) > 10 and not dual and code not in candidates and code not in core_tags): + continue + candidate = candidates.setdefault( + code, + { + "sources": [], + "streak": 0, + "sector": "其他", + "name": hot["name"], + "concepts": [], + "ths_rank": None, + "dc_rank": None, + }, + ) + candidate["ths_rank"] = hot.get("ths_rank") + candidate["dc_rank"] = hot.get("dc_rank") + candidate["concepts"] = hot.get("concepts") or [] + if hot.get("ths_rank") and "同花顺热榜" not in candidate["sources"]: + candidate["sources"].append("同花顺热榜") + if hot.get("dc_rank") and "东方财富热榜" not in candidate["sources"]: + candidate["sources"].append("东方财富热榜") + + normalized = [] + for row in rows: + candidate = candidates.get(str(row.get("code") or "")) + if not candidate: + continue + streak = int(candidate["streak"]) + expected_change = {1: 1.5, 2: 3.0, 3: 4.0}.get(streak, 5.0 if streak else 0.5) + ranks = [ + rank for rank in (candidate.get("ths_rank"), candidate.get("dc_rank")) + if isinstance(rank, int) + ] + if len(ranks) == 2: + expected_change += 0.8 + elif ranks: + best_rank = min(ranks) + expected_change += 0.7 if best_rank <= 10 else 0.4 if best_rank <= 30 else 0.2 + expected_change = min(expected_change, 6.5) + + volume_ratio = _number(row.get("volume_ratio")) + turnover_rate = _number(row.get("turnover_rate")) + amount_million = _number(row.get("amount_million")) + confirmation = self._auction_confirmation(row) + actual_strength = _number(row.get("change")) + confirmation + label = self._expectation_label(actual_strength, expected_change) + is_broken = "昨日炸板" in candidate["sources"] and "昨日涨停" not in candidate["sources"] + identity = f"昨日{streak}板" if streak > 1 else "昨日首板" if streak == 1 else "昨日炸板" if is_broken else "人气榜标的" + popularity = ",双榜共识" if len(ranks) == 2 else ",热榜靠前" if ranks and min(ranks) <= 10 else "" + difference = _number(row.get("change")) - expected_change + direction = "高于" if difference > 0 else "低于" if difference < 0 else "贴合" + reason = ( + f"{identity}{popularity};竞价涨幅{direction}预期中枢" + f"{abs(difference):.1f}个百分点,量比{volume_ratio:.2f}" + ) + tags = sorted(core_tags.get(str(row.get("code") or ""), set())) + scored_row = { + **row, + "concepts": candidate["concepts"], + } + attention_score = self._attention_score( + scored_row, + expected_change, + tags, + candidate["sources"], + streak, + str(candidate.get("sector") or row.get("sector") or "") in strong_sector_names, + ) + normalized.append( + { + **scored_row, + "sector": candidate["sector"] if candidate["sector"] != "其他" else row.get("sector", "其他"), + "candidate_sources": candidate["sources"], + "source_label": " · ".join(candidate["sources"]), + "prior_streak": streak, + "concepts": candidate["concepts"], + "expected_change": round(expected_change, 2), + "actual_strength": round(actual_strength, 2), + "expectation": label, + "attention_score": attention_score, + "core_tags": tags, + "is_market_core": bool(tags), + "expectation_reason": reason, + } + ) + normalized.sort(key=lambda item: (_number(item.get("attention_score")), _number(item.get("amount_million"))), reverse=True) + matched_top = { + str(item.get("code") or "") + for item in sorted( + (item for item in normalized if item.get("expectation") == "符合预期"), + key=lambda item: _number(item.get("attention_score")), + reverse=True, + )[:20] + } + focus_candidates = [ + item for item in normalized + if item.get("is_market_core") + or (_number(item.get("attention_score")) >= 55 and item.get("expectation") != "符合预期") + or str(item.get("code") or "") in matched_top + ] + mandatory = [item for item in focus_candidates if item.get("is_market_core")] + mandatory_codes = {str(item.get("code") or "") for item in mandatory} + optional = [item for item in focus_candidates if str(item.get("code") or "") not in mandatory_codes] + focus_rows = sorted(mandatory, key=lambda item: _number(item.get("attention_score")), reverse=True) + focus_rows.extend(optional[:max(0, 30 - len(focus_rows))]) + focus_rows.sort(key=lambda item: _number(item.get("attention_score")), reverse=True) + return normalized, { + "baseline_date": _display_date(baseline_date), + "prior_limit_count": len(prior_limits), + "prior_broken_count": len(prior_broken), + "hot_candidate_count": sum( + any(source in {"同花顺热榜", "东方财富热榜"} for source in item["sources"]) + for item in candidates.values() + ), + "core_count": sum(bool(item.get("is_market_core")) for item in normalized), + "notice": ";".join(errors), + }, focus_rows + + @staticmethod + def _auction_theme_evidence( + prior_snapshot: dict[str, Any], + candidate_rows: list[dict[str, Any]], + ) -> dict[str, list[dict[str, Any]]]: + prior_sectors = list(prior_snapshot.get("sectors") or []) + carry = [] + for sector in prior_sectors[:10]: + name = str(sector.get("name") or "其他") + matched = [row for row in candidate_rows if str(row.get("sector") or "其他") == name] + changes = [_number(row.get("change")) for row in matched] + middle = median(changes) if changes else -10.0 + positive_rate = sum(value > 0.2 for value in changes) / len(changes) * 100 if changes else 0.0 + if middle >= 2 and positive_rate >= 60: + status = "强承接" + elif middle >= 0 and positive_rate >= 50: + status = "有承接" + elif middle > -2: + status = "分歧" + else: + status = "承接弱" + carry.append( + { + "name": name, + "status": status, + "prior_limit_count": int(_number(sector.get("count"))), + "leader": str(sector.get("leader") or "--"), + "matched_count": len(matched), + "median_change": round(middle, 2) if matched else None, + "positive_rate": round(positive_rate, 1), + "amount_million": round(sum(_number(row.get("amount_million")) for row in matched), 2), + } + ) + + concept_groups: dict[str, list[dict[str, Any]]] = {} + prior_names = {str(item.get("name") or "") for item in prior_sectors} + for row in candidate_rows: + for concept in row.get("concepts") or []: + if concept and concept not in prior_names: + concept_groups.setdefault(str(concept), []).append(row) + new_themes = [] + for name, members in concept_groups.items(): + unique = {str(item.get("code") or ""): item for item in members} + values = list(unique.values()) + changes = [_number(item.get("change")) for item in values] + if len(values) < 2 or median(changes) < 2 or sum(value > 0.2 for value in changes) / len(values) < 0.67: + continue + new_themes.append( + { + "name": name, + "stock_count": len(values), + "median_change": round(median(changes), 2), + "amount_million": round(sum(_number(item.get("amount_million")) for item in values), 2), + "leaders": [str(item.get("name") or "--") for item in sorted(values, key=lambda value: _number(value.get("change")), reverse=True)[:3]], + } + ) + new_themes.sort(key=lambda item: (item["stock_count"], item["median_change"], item["amount_million"]), reverse=True) + return {"carry": carry, "new_themes": new_themes[:8]} diff --git a/backend/features/market/insights_context.py b/backend/features/market/insights_context.py new file mode 100644 index 0000000..a223428 --- /dev/null +++ b/backend/features/market/insights_context.py @@ -0,0 +1,84 @@ +from __future__ import annotations + +import json +from datetime import datetime, timedelta, timezone +from typing import TYPE_CHECKING, Any, Callable + +from backend.data.providers.ifind_client import IfindHttpClient +from backend.data.providers.tushare_client import TushareClient, TushareError + +if TYPE_CHECKING: + from database import ReviewDatabase + + +CHINA_TIMEZONE = timezone(timedelta(hours=8)) + +def _display_date(value: str) -> str: + text = str(value or "").replace("-", "") + if len(text) != 8: + return str(value or "") + return f"{text[:4]}-{text[4:6]}-{text[6:]}" + + +class MarketInsightsContextMixin: + def __init__( + self, + database: ReviewDatabase, + client: TushareClient, + now_provider: Callable[[], datetime] | None = None, + ifind: IfindHttpClient | None = None, + ) -> None: + self.database = database + self.client = client + self._now_provider = now_provider or (lambda: datetime.now(CHINA_TIMEZONE)) + self.ifind = ifind + + def _trade_context(self, requested_date: str) -> tuple[str, str]: + """Resolve trading dates without making cached feature pages depend on Tushare uptime.""" + requested = str(requested_date or "").replace("-", "") + try: + return self.client.resolve_trade_context(requested) + except TushareError: + latest = self.database.get_latest_real_snapshot(requested) or {} + trade_date = str( + (latest.get("meta") or {}).get("trade_date") + or latest.get("_snapshot_date") + or requested + ).replace("-", "") + previous = self.database.get_latest_real_snapshot(trade_date, strictly_before=True) or {} + previous_date = str( + (previous.get("meta") or {}).get("trade_date") + or previous.get("_snapshot_date") + or "" + ).replace("-", "") + return trade_date, previous_date + + def _latest_feature_snapshot(self, kind: str, trade_date: str) -> dict[str, Any] | None: + return self.database.get_latest_data_snapshot(kind, "", trade_date) + + def _stock_master(self) -> dict[str, dict[str, Any]]: + rows = self.database.list_stock_master() + if not rows: + rows = self.client.query( + "stock_basic", + {"list_status": "L"}, + "ts_code,name,industry,market,list_date", + ) + self.database.upsert_stock_master(rows) + rows = self.database.list_stock_master() + return {str(row.get("ts_code") or ""): row for row in rows} + + @staticmethod + def _parse_concepts(value: Any) -> list[str]: + if isinstance(value, list): + return [str(item) for item in value if str(item).strip()] + text = str(value or "").strip() + if not text: + return [] + try: + parsed = json.loads(text) + if isinstance(parsed, list): + return [str(item) for item in parsed if str(item).strip()] + except json.JSONDecodeError: + pass + return [part.strip() for part in text.split(",") if part.strip()] diff --git a/backend/features/market/insights_popularity.py b/backend/features/market/insights_popularity.py new file mode 100644 index 0000000..f057309 --- /dev/null +++ b/backend/features/market/insights_popularity.py @@ -0,0 +1,156 @@ +from __future__ import annotations + +import copy +from datetime import datetime, timedelta +from typing import Any + +from backend.data.numbers import non_nan_number as _number +from backend.data.providers.tushare_client import TushareError +from backend.features.market.insights_context import _display_date + + +class MarketPopularityInsightsMixin: + def popularity(self, requested_date: str, force: bool = False) -> dict[str, Any]: + trade_date, previous_date = self._trade_context(requested_date) + if not force: + cached = self.database.get_data_snapshot("popularity_v1", trade_date) + if cached: + result = copy.deepcopy(cached) + result["meta"] = {**result.get("meta", {}), "cached": True} + return result + + ths_rows, dc_rows, errors = self._hot_rows(trade_date) + actual_date = trade_date + carried_forward = False + if not ths_rows and not dc_rows and previous_date: + ths_rows, dc_rows, errors = self._hot_rows(previous_date) + actual_date = previous_date + carried_forward = bool(ths_rows or dc_rows) + if not ths_rows and not dc_rows: + fallback = self._latest_feature_snapshot("popularity_v1", trade_date) + if fallback: + result = copy.deepcopy(fallback) + result["meta"] = { + **result.get("meta", {}), + "requested_date": _display_date(requested_date), + "carried_forward": True, + "cached": True, + "notice": "当前榜单暂不可用,展示最近有效快照", + } + return result + return { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(trade_date), + "previous_trade_date": _display_date(previous_date), + "carried_forward": False, + "cached": False, + "notice": "该交易日暂无可用人气榜", + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + }, + "summary": {"ths_count": 0, "dc_count": 0, "dual_count": 0}, + "combined": [], "ths": [], "dc": [], + } + + prior_request = (datetime.strptime(actual_date, "%Y%m%d") - timedelta(days=1)).strftime("%Y%m%d") + prior_date, _ = self._trade_context(prior_request) + previous_ths, previous_dc, _ = self._hot_rows(prior_date) + ths = self._normalize_hot(ths_rows, "热股", previous_ths) + dc = self._normalize_hot(dc_rows, "A股市场", previous_dc) + ths_map = {item["ts_code"]: item for item in ths} + dc_map = {item["ts_code"]: item for item in dc} + combined = [] + for ts_code in set(ths_map) | set(dc_map): + ths_item = ths_map.get(ts_code) + dc_item = dc_map.get(ts_code) + base = ths_item or dc_item or {} + ths_rank = int(ths_item["rank"]) if ths_item else None + dc_rank = int(dc_item["rank"]) if dc_item else None + score = ( + (101 - (ths_rank or 101)) * 0.5 + + (201 - (dc_rank or 201)) * 0.25 + ) + combined.append( + { + **base, + "ths_rank": ths_rank, + "dc_rank": dc_rank, + "score": round(score, 2), + "dual_source": bool(ths_item and dc_item), + "concepts": (ths_item or {}).get("concepts") or [], + } + ) + combined.sort(key=lambda item: (item["dual_source"], item["score"]), reverse=True) + for index, item in enumerate(combined, 1): + item["rank"] = index + result = { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(actual_date), + "previous_trade_date": _display_date(prior_date), + "carried_forward": carried_forward, + "cached": False, + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "notice": ";".join(errors), + }, + "summary": { + "ths_count": len(ths), + "dc_count": len(dc), + "dual_count": sum(item["dual_source"] for item in combined), + }, + "combined": combined[:200], + "ths": ths, + "dc": dc, + } + self.database.save_data_snapshot("popularity_v1", trade_date, "market", result) + return result + + def _hot_rows(self, trade_date: str) -> tuple[list[dict[str, Any]], list[dict[str, Any]], list[str]]: + errors = [] + try: + ths = self.client.query("ths_hot", {"trade_date": trade_date}) + except TushareError: + ths = [] + errors.append("同花顺榜单暂不可用") + try: + dc = self.client.query("dc_hot", {"trade_date": trade_date}) + except TushareError: + dc = [] + errors.append("东方财富榜单暂不可用") + return ths, dc, errors + + def _normalize_hot( + self, + rows: list[dict[str, Any]], + data_type: str, + previous_rows: list[dict[str, Any]], + ) -> list[dict[str, Any]]: + previous = { + str(row.get("ts_code") or ""): int(_number(row.get("rank"))) + for row in previous_rows + if str(row.get("data_type") or "") == data_type + } + items = [] + for row in rows: + if str(row.get("data_type") or "") != data_type: + continue + rank = int(_number(row.get("rank"))) + ts_code = str(row.get("ts_code") or "") + prior_rank = previous.get(ts_code) + items.append( + { + "rank": rank, + "ts_code": ts_code, + "code": ts_code.split(".")[0], + "name": str(row.get("ts_name") or "--"), + "change": round(_number(row.get("pct_change")), 2), + "price": round(_number(row.get("current_price")), 2), + "hot": round(_number(row.get("hot")), 1), + "rank_change": (prior_rank - rank) if prior_rank else None, + "concepts": self._parse_concepts(row.get("concept")), + "reason": str(row.get("rank_reason") or ""), + "rank_time": str(row.get("rank_time") or ""), + } + ) + items.sort(key=lambda item: item["rank"]) + return items diff --git a/backend/features/market/insights_themes.py b/backend/features/market/insights_themes.py new file mode 100644 index 0000000..2c5a4a1 --- /dev/null +++ b/backend/features/market/insights_themes.py @@ -0,0 +1,222 @@ +from __future__ import annotations + +import copy +from datetime import datetime, timedelta +from typing import Any + +from backend.data.numbers import non_nan_number as _number +from backend.data.providers.tushare_client import TushareError +from backend.features.market.insights_context import _display_date + + +class MarketThemeInsightsMixin: + def _theme_directory(self) -> list[dict[str, Any]]: + cached = self.database.get_data_snapshot("theme_directory_v1", "ths") or {} + if cached.get("items"): + return list(cached["items"]) + rows = self.client.query( + "ths_index", {}, "ts_code,name,count,exchange,list_date,type" + ) + items = [ + { + "code": str(row.get("ts_code") or ""), + "name": str(row.get("name") or ""), + "member_count": int(_number(row.get("count"))), + "list_date": str(row.get("list_date") or ""), + } + for row in rows + if str(row.get("type") or "").upper() == "N" + and str(row.get("exchange") or "").upper() == "A" + and row.get("ts_code") + and row.get("name") + ] + self.database.save_data_snapshot( + "theme_directory_v1", "ths", "market", {"items": items} + ) + return items + + def theme_library(self, requested_date: str, force: bool = False) -> dict[str, Any]: + trade_date, previous_date = self._trade_context(requested_date) + if not force: + cached = self.database.get_data_snapshot("theme_library_v1", trade_date) + if cached: + result = copy.deepcopy(cached) + result["meta"] = {**result.get("meta", {}), "cached": True} + return result + + try: + daily = self.client.query( + "ths_daily", + {"trade_date": trade_date}, + "ts_code,trade_date,open,high,low,close,pre_close,pct_change,vol,turnover_rate", + ) + except TushareError: + fallback = self._latest_feature_snapshot("theme_library_v1", trade_date) + if fallback: + result = copy.deepcopy(fallback) + result["meta"] = { + **result.get("meta", {}), + "requested_date": _display_date(requested_date), + "carried_forward": True, + "cached": True, + "notice": "当前题材行情暂不可用,展示最近有效快照", + } + return result + daily = [] + actual_date = trade_date + carried_forward = False + if not daily and previous_date: + try: + daily = self.client.query( + "ths_daily", + {"trade_date": previous_date}, + "ts_code,trade_date,open,high,low,close,pre_close,pct_change,vol,turnover_rate", + ) + except TushareError: + daily = [] + actual_date = previous_date + carried_forward = bool(daily) + daily_map = {str(row.get("ts_code") or ""): row for row in daily} + try: + hot_rows = self.client.query("ths_hot", {"trade_date": actual_date}) + except TushareError: + hot_rows = [] + hot_map = { + str(row.get("ts_code") or ""): int(_number(row.get("rank"))) + for row in hot_rows + if str(row.get("data_type") or "") == "概念板块" + } + items = [] + for item in self._theme_directory(): + quote = daily_map.get(item["code"], {}) + items.append( + { + **item, + "change": round(_number(quote.get("pct_change")), 2), + "close": round(_number(quote.get("close")), 3), + "turnover_rate": round(_number(quote.get("turnover_rate")), 2), + "volume": round(_number(quote.get("vol")), 2), + "hot_rank": hot_map.get(item["code"]), + "has_quote": bool(quote), + } + ) + items.sort( + key=lambda item: ( + item["has_quote"], + item["hot_rank"] is not None, + -(item["hot_rank"] or 9999), + item["change"], + ), + reverse=True, + ) + quoted = [item for item in items if item["has_quote"]] + result = { + "meta": { + "requested_date": _display_date(requested_date), + "trade_date": _display_date(actual_date), + "carried_forward": carried_forward, + "cached": False, + "notice": "" if quoted else "该交易日暂无题材行情,已保留题材目录", + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + }, + "summary": { + "theme_count": len(items), + "quoted_count": len(quoted), + "up_count": sum(item["change"] > 0 for item in quoted), + "down_count": sum(item["change"] < 0 for item in quoted), + "hot_count": len(hot_map), + }, + "items": items, + } + self.database.save_data_snapshot("theme_library_v1", trade_date, "market", result) + return result + + def theme_detail(self, code: str, requested_date: str) -> dict[str, Any]: + code = str(code or "").strip().upper() + library = self.theme_library(requested_date) + theme = next((item for item in library["items"] if item["code"] == code), None) + if not theme: + raise ValueError("未找到对应题材。") + actual_date = str(library["meta"]["trade_date"]).replace("-", "") + detail_key = f"{actual_date}:{code}" + cached_detail = self.database.get_data_snapshot("theme_detail_v1", detail_key) + if cached_detail: + return cached_detail + try: + members = self.client.query( + "ths_member", {"ts_code": code, "is_new": "Y"}, "ts_code,con_code,con_name" + ) + except TushareError: + members = [] + bars = self.database.daily_bars_for_date(actual_date) + if not bars: + bars = self.client.query( + "daily", + {"trade_date": actual_date}, + "ts_code,trade_date,open,high,low,close,pct_chg,vol,amount", + ) + self.database.upsert_daily_bars(bars) + bar_map = {str(row.get("ts_code") or ""): row for row in bars} + normalized_members = [] + for member in members: + ts_code = str(member.get("con_code") or "") + quote = bar_map.get(ts_code, {}) + normalized_members.append( + { + "code": ts_code.split(".")[0], + "ts_code": ts_code, + "name": str(member.get("con_name") or "--"), + "price": round(_number(quote.get("close")), 2), + "change": round(_number(quote.get("pct_chg")), 2), + "amount_billion": round(_number(quote.get("amount")) / 100_000, 2), + "has_quote": bool(quote), + } + ) + normalized_members.sort( + key=lambda item: (item["has_quote"], item["change"], item["amount_billion"]), + reverse=True, + ) + end = datetime.strptime(actual_date, "%Y%m%d") + try: + history = self.client.query( + "ths_daily", + { + "ts_code": code, + "start_date": (end - timedelta(days=190)).strftime("%Y%m%d"), + "end_date": actual_date, + }, + "ts_code,trade_date,open,high,low,close,pct_change,vol,turnover_rate", + ) + except TushareError: + history = [] + history.sort(key=lambda row: str(row.get("trade_date") or "")) + series = [ + { + "trade_date": _display_date(str(row.get("trade_date") or "")), + "open": _number(row.get("open")), + "high": _number(row.get("high")), + "low": _number(row.get("low")), + "close": _number(row.get("close")), + "change": _number(row.get("pct_change")), + "volume": _number(row.get("vol")), + } + for row in history[-90:] + ] + result = { + "meta": { + "trade_date": _display_date(actual_date), + "notice": "" if members or history else "题材成分与走势暂不可用", + }, + "theme": theme, + "series": series, + "members": normalized_members, + "summary": { + "member_count": len(normalized_members), + "up_count": sum(item["change"] > 0 for item in normalized_members if item["has_quote"]), + "down_count": sum(item["change"] < 0 for item in normalized_members if item["has_quote"]), + "quoted_count": sum(item["has_quote"] for item in normalized_members), + }, + } + if members or history: + self.database.save_data_snapshot("theme_detail_v1", detail_key, "market", result) + return result diff --git a/backend/features/market/routes.py b/backend/features/market/routes.py new file mode 100644 index 0000000..1055216 --- /dev/null +++ b/backend/features/market/routes.py @@ -0,0 +1,91 @@ +from __future__ import annotations + +import re +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs +from backend.data.providers.tushare_client import TushareError +from backend.features.market import ChartDataError + + +class MarketRoutesMixin: + def _handle_market_get(self, parsed) -> bool: + if parsed.path == "/api/dashboard": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + self.send_json(self.application_service.get_dashboard(trade_date, False)) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + except Exception as exc: + self.send_json({"error": f"数据加载失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) + return True + if parsed.path == "/api/realtime-aggregate/health": + query = parse_qs(parsed.query) + try: + self.send_json( + { + "ok": True, + "aggregate": self.application_service.realtime_aggregate_health( + query.get("sector", [""])[0] + ), + } + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/search": + query = parse_qs(parsed.query) + search_query = query.get("q", [""])[0] + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + self.send_json(self.application_service.search_entities(search_query, trade_date)) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/search/detail": + query = parse_qs(parsed.query) + entity_type = query.get("type", [""])[0] + identifier = query.get("id", [""])[0] + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + self.send_json( + self.application_service.get_search_detail(entity_type, identifier, trade_date) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + except TushareError as exc: + self.send_json({"error": f"行情加载失败:{exc}"}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/chart/intraday": + query = parse_qs(parsed.query) + entity_type = query.get("type", [""])[0] + identifier = query.get("id", [""])[0] + try: + self.send_json(self.application_service.get_intraday_chart(entity_type, identifier)) + except (ValueError, ChartDataError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + stock_preview_match = re.fullmatch(r"/api/stock/(\d{6})/preview", parsed.path) + if stock_preview_match: + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + force = query.get("force", ["0"])[0] == "1" + try: + self.send_json( + self.application_service.get_stock_preview(stock_preview_match.group(1), trade_date, force) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + stock_match = re.fullmatch(r"/api/stock/(\d{6})", parsed.path) + if stock_match: + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + force = query.get("force", ["0"])[0] == "1" + try: + self.send_json(self.application_service.get_stock_detail(stock_match.group(1), trade_date, force)) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/features/mentor/routes.py b/backend/features/mentor/routes.py new file mode 100644 index 0000000..f9aba96 --- /dev/null +++ b/backend/features/mentor/routes.py @@ -0,0 +1,57 @@ +from __future__ import annotations + +import json +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs + + +class MentorRoutesMixin: + def _handle_mentor_get(self, parsed) -> bool: + if parsed.path == "/api/mentors/setup": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + self.send_json(self.application_service.mentor_setup(trade_date)) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/mentors/messages": + query = parse_qs(parsed.query) + try: + self.send_json( + { + "items": self.application_service.mentor_messages( + query.get("mentor_id", [""])[0], + query.get("trade_date", [date.today().isoformat()])[0], + ) + } + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False + + def _handle_mentor_post(self, parsed) -> bool: + if parsed.path == "/api/mentors/preferences": + try: + result = self.application_service.save_mentor_preferences(self.read_json_body()) + self.send_json({"ok": True, **result}) + except (ValueError, json.JSONDecodeError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False + + def _handle_mentor_delete(self, parsed) -> bool: + if parsed.path == "/api/mentors/messages": + query = parse_qs(parsed.query) + try: + deleted = self.application_service.clear_mentor_messages( + query.get("mentor_id", [""])[0], + query.get("trade_date", [date.today().isoformat()])[0], + ) + self.send_json({"ok": True, "deleted": deleted}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/features/pools/routes.py b/backend/features/pools/routes.py new file mode 100644 index 0000000..2adafd0 --- /dev/null +++ b/backend/features/pools/routes.py @@ -0,0 +1,18 @@ +from __future__ import annotations + +import json +from http import HTTPStatus + + +class PoolRoutesMixin: + def save_reason(self) -> None: + try: + body = self.read_json_body() + self.application_service.save_reason( + str(body.get("trade_date") or ""), + str(body.get("code") or ""), + str(body.get("reason") or ""), + ) + self.send_json({"ok": True}) + except (ValueError, json.JSONDecodeError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) diff --git a/backend/features/popularity/routes.py b/backend/features/popularity/routes.py new file mode 100644 index 0000000..830889b --- /dev/null +++ b/backend/features/popularity/routes.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs +from backend.data.providers.tushare_client import TushareError + + +class PopularityRoutesMixin: + def _handle_popularity_get(self, parsed) -> bool: + if parsed.path == "/api/popularity": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.popularity( + query.get("trade_date", [date.today().isoformat()])[0], + query.get("force", ["0"])[0] == "1", + ) + ) + except (ValueError, TushareError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/features/review/routes.py b/backend/features/review/routes.py new file mode 100644 index 0000000..9e568ba --- /dev/null +++ b/backend/features/review/routes.py @@ -0,0 +1,81 @@ +from __future__ import annotations + +import re +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs + + +class ReviewRoutesMixin: + def _handle_review_get(self, parsed) -> bool: + if parsed.path == "/api/trades": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.trade_entries( + query.get("start_date", [""])[0], + query.get("end_date", [""])[0], + query.get("code", [""])[0], + ) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/assistant/messages": + self.send_json({"items": self.application_service.assistant_messages()}) + return True + if parsed.path == "/api/watchlist": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.review_watchlist( + query.get("trade_date", [date.today().isoformat()])[0] + ) + ) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/notes": + query = parse_qs(parsed.query) + code = query.get("code", [""])[0] + trade_date = query.get("trade_date", [""])[0].replace("-", "") + scope = query.get("scope", ["all"])[0] + if scope not in {"all", "daily", "stock"}: + self.send_json({"error": "复盘记录范围不支持。"}, HTTPStatus.BAD_REQUEST) + return True + self.send_json( + { + "items": self.application_service.database.list_notes( + self.application_service.current_user_id, code, trade_date, scope + ) + } + ) + return True + return False + + def _handle_review_delete(self, parsed) -> bool: + if parsed.path == "/api/assistant/messages": + deleted = self.application_service.clear_assistant_messages() + self.send_json({"ok": True, "deleted": deleted}) + return True + watchlist_match = re.fullmatch(r"/api/watchlist/(\d{6})", parsed.path) + if watchlist_match: + deleted = self.application_service.database.delete_watchlist( + self.application_service.current_user_id, watchlist_match.group(1) + ) + self.send_json({"ok": True, "deleted": deleted}) + return True + note_match = re.fullmatch(r"/api/notes/(\d+)", parsed.path) + if note_match: + deleted = self.application_service.database.delete_note( + self.application_service.current_user_id, int(note_match.group(1)) + ) + self.send_json({"ok": True, "deleted": deleted}) + return True + trade_match = re.fullmatch(r"/api/trades/(\d+)", parsed.path) + if trade_match: + self.send_json( + {"ok": True, **self.application_service.delete_trade_entry(int(trade_match.group(1)))} + ) + return True + return False diff --git a/backend/features/rotation/routes.py b/backend/features/rotation/routes.py new file mode 100644 index 0000000..a9b37dd --- /dev/null +++ b/backend/features/rotation/routes.py @@ -0,0 +1,30 @@ +from __future__ import annotations + +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs + + +class RotationRoutesMixin: + def _handle_rotation_get(self, parsed) -> bool: + if parsed.path == "/api/rotation/history": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + self.send_json(self.application_service.rotation_history(trade_date, 9)) + except (TypeError, ValueError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/rotation/members": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.rotation_sector_members( + query.get("trade_date", [date.today().isoformat()])[0], + query.get("sector", [""])[0], + ) + ) + except (TypeError, ValueError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/features/screener/backtest.py b/backend/features/screener/backtest.py new file mode 100644 index 0000000..e9a7295 --- /dev/null +++ b/backend/features/screener/backtest.py @@ -0,0 +1,141 @@ +from __future__ import annotations + +import statistics +from collections import defaultdict +from datetime import datetime +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.features.screener.factors import FactorBuilder +from backend.features.screener.formula import FormulaEvaluator +from database import ReviewDatabase + + +class BacktestRunner: + def __init__( + self, + database: ReviewDatabase, + factor_builder: FactorBuilder, + formula_evaluator: FormulaEvaluator, + ) -> None: + self.database = database + self.factor_builder = factor_builder + self.formula_evaluator = formula_evaluator + self._backtest_factor_cache: dict[tuple[str, int], list[dict[str, Any]]] = {} + + def build_factors( + self, trade_date: str, history_days: int + ) -> tuple[list[dict[str, Any]], str]: + return self.factor_builder.build_factors( + trade_date, history_days=history_days + ) + + def apply_formula( + self, rows: list[dict[str, Any]], formula: dict[str, Any], regime: str + ) -> list[dict[str, Any]]: + return self.formula_evaluator.apply_formula(rows, formula, regime) + + def backtest(self, trade_date: str, formula: dict[str, Any]) -> dict[str, Any]: + meta = formula.get("meta") or {} + history_days = max(21, min(260, int(meta.get("history_days") or 80))) + holding_days = max(1, min(30, int(meta.get("backtest_days") or 3))) + take_profit = max(0.5, min(50.0, float(meta.get("take_profit") or 3))) + stop_loss = min(-0.5, max(-50.0, float(meta.get("stop_loss") or -3))) + dates = self.database.factor_dates(trade_date, history_days + holding_days + 20) + eligible_dates = dates[:-holding_days] if len(dates) > holding_days else [] + frequency = str(meta.get("frequency") or "每日") + if "月" in frequency: + grouped = {} + for value in eligible_dates: + grouped[value[:6]] = value + evaluation_dates = list(grouped.values())[-8:] + elif "双周" in frequency: + weekly_dates = [] + grouped = {} + for value in eligible_dates: + parsed = datetime.strptime(value, "%Y%m%d") + grouped[parsed.strftime("%G-%V")] = value + weekly_dates = list(grouped.values()) + evaluation_dates = weekly_dates[-16::2][-8:] + elif "周" in frequency: + grouped = {} + for value in eligible_dates: + parsed = datetime.strptime(value, "%Y%m%d") + grouped[parsed.strftime("%G-%V")] = value + evaluation_dates = list(grouped.values())[-8:] + else: + evaluation_dates = eligible_dates[-8:] + wins = 0 + losses = 0 + samples = 0 + returns = [] + drawdowns = [] + all_data = self.database.load_factor_data( + trade_date, history_days + holding_days + 20 + ) + bars_by_code: dict[str, list[dict[str, Any]]] = defaultdict(list) + for row in all_data["bars"]: + bars_by_code[row["ts_code"]].append(row) + for bars in bars_by_code.values(): + bars.sort(key=lambda item: item["trade_date"]) + + for current_date in evaluation_dates: + try: + cache_key = (current_date, history_days) + factors = self._backtest_factor_cache.get(cache_key) + if factors is None: + factors, _ = self.build_factors( + current_date, history_days=history_days + ) + if len(self._backtest_factor_cache) >= 64: + self._backtest_factor_cache.pop( + next(iter(self._backtest_factor_cache)) + ) + self._backtest_factor_cache[cache_key] = factors + except ValueError: + continue + selected = self.apply_formula(factors, {**formula, "limit": min(10, formula["limit"])}, "backtest") + for candidate in selected: + bars = bars_by_code.get(candidate["ts_code"], []) + index = next((i for i, row in enumerate(bars) if row["trade_date"] == current_date), -1) + future = bars[index + 1:index + 1 + holding_days] if index >= 0 else [] + if len(future) < holding_days: + continue + entry = candidate["price"] + won = False + lost = False + for day in future: + low_return = (_number(day["low"]) / entry - 1) * 100 + high_return = (_number(day["high"]) / entry - 1) * 100 + if low_return <= stop_loss: + lost = True + break + if high_return >= take_profit: + won = True + break + if won: + wins += 1 + elif lost: + losses += 1 + samples += 1 + returns.append((_number(future[-1]["close"]) / entry - 1) * 100) + drawdowns.append(min((_number(day["low"]) / entry - 1) * 100 for day in future)) + return { + "samples": samples, + "wins": wins, + "losses": losses, + "win_rate": round(wins / samples * 100, 1) if samples else 0, + "average_3d_return": round(statistics.fmean(returns), 2) if returns else 0, + "average_holding_return": round(statistics.fmean(returns), 2) if returns else 0, + "average_drawdown": round(statistics.fmean(drawdowns), 2) if drawdowns else 0, + "evaluation_days": len(evaluation_dates), + "frequency": frequency, + "holding_days": holding_days, + "take_profit": take_profit, + "stop_loss": stop_loss, + "definition": ( + f"收盘后选股,未来{holding_days}日先触及+{take_profit:g}%且未先触及" + f"{stop_loss:g}%计为成功;同日双触发按失败处理。" + ), + "approximate": True, + } diff --git a/backend/features/screener/catalog.py b/backend/features/screener/catalog.py new file mode 100644 index 0000000..f8e985e --- /dev/null +++ b/backend/features/screener/catalog.py @@ -0,0 +1,707 @@ +from __future__ import annotations + +from backend.features.screener.strategies import ADVANCED_CURATED_STRATEGIES + + +REGIMES = { + "ice": "冰点", + "repair": "修复", + "fermentation": "发酵", + "climax": "高潮", + "divergence": "分化", + "retreat": "退潮", +} + +FACTOR_FIELDS = { + "close": "收盘价", + "pct_chg": "当日涨幅", + "return_5d": "5日涨幅", + "return_10d": "10日涨幅", + "return_20d": "20日涨幅", + "return_60d": "60日涨幅", + "return_5d_rank": "5日涨幅排名", + "momentum_60_5": "中期动量", + "momentum_60_5_rank": "中期动量排名", + "above_ma20": "站上20日线", + "rsi_6": "RSI(6)", + "ma60_slope": "60日线斜率", + "ma20_slope_5d": "20日线5日斜率", + "ma_bull_alignment": "均线多头排列", + "drawdown_from_high_250": "距250日高点回撤", + "donchian_breakout_pct": "唐奇安突破幅度", + "range_20d": "20日振幅", + "rs_high_120": "RS线120日新高", + "excess_return_60d": "60日超额收益", + "weekly_trend_signal": "周线趋势信号", + "daily_buy_trigger": "日线买点", + "weekly_amount_trend": "周成交趋势", + "volume_ratio_5d": "5日量比", + "turnover_5d": "5日累计换手", + "volatility_10d": "10日波动率", + "amount_billion": "成交额", + "turnover_rate": "换手率", + "circ_mv_billion": "流通市值", + "net_flow_million": "主力净流入", + "large_flow_million": "大单净流入", + "net_flow_5d_million": "5日主力净流入", + "flow_to_circ_mv_5d": "5日净流入占流通市值", + "sector_strength": "板块强度", + "sector_return_5d": "行业5日涨幅", + "sector_return_20d": "行业20日涨幅", + "sector_momentum_rank": "行业20日动量排名", + "sector_stock_momentum_rank": "行业内个股动量排名", + "sector_net_flow_5d_million": "行业5日主力净流入", + "sector_flow_rank": "行业资金流排名", + "sector_prosperity_rank": "行业景气度排名", + "sector_trend_rank": "行业趋势排名", + "sector_crowding_rank": "行业拥挤度排名", + "sector_composite_score": "行业三维综合分", + "sector_limit_count": "板块涨停数", + "sector_up_count": "板块强势股数", + "relative_strength": "相对强度", + "limit_streak": "连板高度", + "auction_change": "竞价涨幅", + "auction_amount_million": "竞价成交额", + "auction_turnover_rate": "竞价换手率", + "auction_volume_ratio": "竞价量比", + "total_mv_billion": "总市值", + "pe_ttm": "市盈率TTM", + "pb": "市净率", + "ps_ttm": "市销率TTM", + "dividend_yield_ttm": "股息率TTM", + "dividend_years": "近年持续分红", + "roe": "净资产收益率", + "roa": "总资产收益率", + "roic": "投入资本回报率", + "gross_margin": "销售毛利率", + "netprofit_yoy": "净利润同比", + "revenue_yoy": "营业收入同比", + "ocf_to_opincome": "经营现金流质量", + "earnings_surprise_pct": "业绩超预期幅度", + "earnings_days_since_announce": "业绩公告后天数", + "earnings_event_quality": "业绩事件质量", + "popularity_score": "人气榜热度", + "popularity_rank_change": "人气排名跃升", + "popularity_dual_source": "双榜共识", + "institution_net_buy_million": "机构席位净买入", + "institution_seat_count": "机构席位数", + "style_size_fit": "大小盘风格匹配", + "style_growth_fit": "成长价值风格匹配", + "style_fit_score": "当前风格匹配度", + "factor_value_score": "价值因子分", + "factor_growth_score": "成长因子分", + "factor_quality_score": "质量因子分", + "factor_momentum_score": "动量因子分", + "factor_sentiment_score": "交易情绪因子分", + "multi_factor_composite": "动态多因子综合分", + "relative_position_60": "60日相对位置", + "max_abs_change_15d": "15日最大波动", + "close_to_high_15d": "距15日高点", + "close_to_high_60d": "距60日高点", + "no_limit_30d": "近30日无涨停", + "had_limit_80d": "近80日曾涨停", + "previous_first_limit": "昨日首板", + "previous_limit_signal": "昨日涨停或触板", + "previous_limit_streak": "昨日连板高度", + "previous_amount_billion": "昨日成交额", + "is_limit_up_today": "当日涨停", + "is_limit_down_today": "当日跌停", + "sector_breadth_ma20": "行业20日线宽度", + "no_limit_down_20d": "近20日无跌停", + "financial_risk": "财务风险标记", + "is_market_height": "当前市场最高板", + "new_space_board": "新晋空间板", + "max_continuous_board_10d": "近10日最高连板", + "dragon_first_yin": "龙头首阴", + "yin_day_pct": "首阴跌幅", + "vol_vs_previous": "较前日量能", + "broken_reversal": "断板反包", + "days_since_broken": "断板后天数", + "close_above_broken_high": "收复断板高点", + "vol_vs_broken_day": "较断板日量能", + "recent_limit_up_5d": "近5日涨停次数", + "intraday_min_pct": "盘中最大跌幅", + "lower_shadow_ratio": "下影线实体比", +} + +FACTOR_GROUPS = { + "行情动量": [ + "close", "pct_chg", "return_5d", "return_10d", "return_20d", "return_60d", + "return_5d_rank", "momentum_60_5", "momentum_60_5_rank", "above_ma20", + "rsi_6", "ma60_slope", "ma20_slope_5d", "ma_bull_alignment", + "drawdown_from_high_250", "donchian_breakout_pct", "range_20d", + "rs_high_120", "excess_return_60d", "weekly_trend_signal", + "daily_buy_trigger", "weekly_amount_trend", "relative_strength", + "relative_position_60", "close_to_high_15d", "close_to_high_60d", + ], + "量价交易": [ + "volume_ratio_5d", "turnover_5d", "volatility_10d", "amount_billion", "turnover_rate", + "net_flow_million", "large_flow_million", "net_flow_5d_million", + "flow_to_circ_mv_5d", "previous_amount_billion", + "intraday_min_pct", "lower_shadow_ratio", "vol_vs_previous", "vol_vs_broken_day", + ], + "板块结构": [ + "sector_strength", "sector_return_5d", "sector_return_20d", "sector_momentum_rank", + "sector_stock_momentum_rank", "sector_net_flow_5d_million", "sector_flow_rank", + "sector_prosperity_rank", "sector_trend_rank", "sector_crowding_rank", + "sector_composite_score", + "sector_limit_count", "sector_up_count", "sector_breadth_ma20", + "limit_streak", "previous_limit_streak", "previous_first_limit", "previous_limit_signal", + "is_limit_up_today", "is_limit_down_today", + "no_limit_30d", "had_limit_80d", "max_abs_change_15d", "no_limit_down_20d", + "is_market_height", "new_space_board", "max_continuous_board_10d", + "dragon_first_yin", "yin_day_pct", "broken_reversal", "days_since_broken", + "close_above_broken_high", "recent_limit_up_5d", + ], + "竞价因子": [ + "auction_change", "auction_amount_million", "auction_turnover_rate", "auction_volume_ratio", + ], + "估值规模": [ + "circ_mv_billion", "total_mv_billion", "pe_ttm", "pb", "ps_ttm", + "dividend_yield_ttm", "dividend_years", + ], + "财务质量": [ + "roe", "roa", "roic", "gross_margin", "netprofit_yoy", "revenue_yoy", + "ocf_to_opincome", "financial_risk", + "earnings_surprise_pct", "earnings_days_since_announce", "earnings_event_quality", + ], + "特色数据": [ + "popularity_score", "popularity_rank_change", "popularity_dual_source", + "institution_net_buy_million", "institution_seat_count", + "style_size_fit", "style_growth_fit", "style_fit_score", + "factor_value_score", "factor_growth_score", "factor_quality_score", + "factor_momentum_score", "factor_sentiment_score", "multi_factor_composite", + ], +} + +ALLOWED_OPERATORS = {">", ">=", "<", "<=", "==", "!=", "between", "in"} + + +BUILTIN_STRATEGIES = [ + { + "name": "冰点抗跌先手", + "description": "寻找冰点中保持相对强度、低波动且有板块承接的个股,允许无结果。", + "regimes": ["ice"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "pct_chg", "op": "between", "value": [-3, 7]}, + {"field": "return_5d", "op": ">=", "value": -5}, + {"field": "amount_billion", "op": ">=", "value": 1}, + {"field": "volatility_10d", "op": "<=", "value": 7}, + ], + "score": [ + {"field": "relative_strength", "weight": 0.30, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.25, "direction": "desc"}, + {"field": "volume_ratio_5d", "weight": 0.20, "direction": "desc"}, + {"field": "volatility_10d", "weight": 0.15, "direction": "asc"}, + {"field": "amount_billion", "weight": 0.10, "direction": "desc"}, + ], + "limit": 12, + "min_score": 0.58, + }, + }, + { + "name": "修复先锋", + "description": "筛选率先站回趋势、温和放量并获得板块共振的修复前排。", + "regimes": ["repair"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "pct_chg", "op": "between", "value": [1, 9.7]}, + {"field": "return_5d", "op": ">", "value": 0}, + {"field": "above_ma20", "op": "==", "value": 1}, + {"field": "volume_ratio_5d", "op": ">=", "value": 1.05}, + ], + "score": [ + {"field": "sector_strength", "weight": 0.28, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.24, "direction": "desc"}, + {"field": "volume_ratio_5d", "weight": 0.18, "direction": "desc"}, + {"field": "net_flow_million", "weight": 0.16, "direction": "desc"}, + {"field": "amount_billion", "weight": 0.14, "direction": "desc"}, + ], + "limit": 15, + "min_score": 0.54, + }, + }, + { + "name": "主线发酵跟随", + "description": "在主线扩散期寻找趋势、成交承载和板块涨停梯队共同增强的个股。", + "regimes": ["fermentation"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "pct_chg", "op": "between", "value": [0, 9.8]}, + {"field": "return_5d", "op": ">=", "value": 3}, + {"field": "above_ma20", "op": "==", "value": 1}, + {"field": "amount_billion", "op": ">=", "value": 2}, + ], + "score": [ + {"field": "sector_limit_count", "weight": 0.25, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.24, "direction": "desc"}, + {"field": "return_10d", "weight": 0.20, "direction": "desc"}, + {"field": "amount_billion", "weight": 0.16, "direction": "desc"}, + {"field": "large_flow_million", "weight": 0.15, "direction": "desc"}, + ], + "limit": 15, + "min_score": 0.55, + }, + }, + { + "name": "高潮核心去后排", + "description": "高潮阶段只保留容量、趋势和辨识度较高的核心,降低后排跟风权重。", + "regimes": ["climax"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "pct_chg", "op": "between", "value": [-2, 7]}, + {"field": "return_10d", "op": ">=", "value": 5}, + {"field": "above_ma20", "op": "==", "value": 1}, + {"field": "amount_billion", "op": ">=", "value": 5}, + ], + "score": [ + {"field": "amount_billion", "weight": 0.28, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.22, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.20, "direction": "desc"}, + {"field": "volatility_10d", "weight": 0.15, "direction": "asc"}, + {"field": "limit_streak", "weight": 0.15, "direction": "desc"}, + ], + "limit": 10, + "min_score": 0.62, + }, + }, + { + "name": "分化承接回流", + "description": "寻找分化中仍有趋势承接、板块强度和资金回流的核心候选。", + "regimes": ["divergence"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "pct_chg", "op": "between", "value": [-3, 7]}, + {"field": "return_5d", "op": ">", "value": 0}, + {"field": "above_ma20", "op": "==", "value": 1}, + {"field": "volume_ratio_5d", "op": "between", "value": [0.7, 3.5]}, + ], + "score": [ + {"field": "relative_strength", "weight": 0.28, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.24, "direction": "desc"}, + {"field": "net_flow_million", "weight": 0.20, "direction": "desc"}, + {"field": "volatility_10d", "weight": 0.16, "direction": "asc"}, + {"field": "amount_billion", "weight": 0.12, "direction": "desc"}, + ], + "limit": 12, + "min_score": 0.57, + }, + }, + { + "name": "退潮防守观察", + "description": "退潮期采用高门槛防守筛选,结果为空代表当前不宜主动出击。", + "regimes": ["retreat"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 180}, + "filters": [ + {"field": "pct_chg", "op": "between", "value": [-2, 4]}, + {"field": "return_5d", "op": ">=", "value": -2}, + {"field": "above_ma20", "op": "==", "value": 1}, + {"field": "volatility_10d", "op": "<=", "value": 4.5}, + {"field": "amount_billion", "op": ">=", "value": 2}, + ], + "score": [ + {"field": "volatility_10d", "weight": 0.30, "direction": "asc"}, + {"field": "relative_strength", "weight": 0.25, "direction": "desc"}, + {"field": "amount_billion", "weight": 0.20, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.15, "direction": "desc"}, + {"field": "net_flow_million", "weight": 0.10, "direction": "desc"}, + ], + "limit": 8, + "min_score": 0.68, + }, + }, + { + "name": "竞价强势确认", + "description": "用竞价涨幅、成交承载和量比确认修复或发酵阶段的主动进攻标的。", + "regimes": ["repair", "fermentation", "divergence"], + "formula": { + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "auction_change", "op": "between", "value": [1, 7]}, + {"field": "auction_amount_million", "op": ">=", "value": 3}, + {"field": "auction_volume_ratio", "op": ">=", "value": 0.8}, + {"field": "amount_billion", "op": ">=", "value": 1}, + ], + "score": [ + {"field": "auction_amount_million", "weight": 0.26, "direction": "desc"}, + {"field": "auction_volume_ratio", "weight": 0.22, "direction": "desc"}, + {"field": "auction_change", "weight": 0.18, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.18, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.16, "direction": "desc"}, + ], + "limit": 15, + "min_score": 0.56, + }, + }, +] + +for _strategy in BUILTIN_STRATEGIES: + _strategy["formula"].setdefault("meta", { + "library": "smart", "category": "周期策略", "quality": "系统", + "frequency": "每日", "risk": "随市场阶段", "data_group": "行情因子", + }) + + +CURATED_STRATEGIES = [ + { + "name": "连续分红质量", + "description": "寻找持续派息、盈利质量稳定且波动可控的长期现金回报型公司。", + "regimes": list(REGIMES), + "formula": { + "meta": {"library": "curated", "category": "红利价值", "quality": "A", "frequency": "月度", "risk": "中低", "data_group": "估值与财务"}, + "universe": {"exclude_st": True, "listed_days_min": 1095}, + "filters": [ + {"field": "dividend_years", "op": ">=", "value": 4}, + {"field": "dividend_yield_ttm", "op": ">=", "value": 2}, + {"field": "roe", "op": ">=", "value": 6}, + {"field": "pb", "op": "between", "value": [0.1, 4]}, + ], + "score": [ + {"field": "dividend_yield_ttm", "weight": 0.30, "direction": "desc"}, + {"field": "roe", "weight": 0.24, "direction": "desc"}, + {"field": "ocf_to_opincome", "weight": 0.18, "direction": "desc"}, + {"field": "volatility_10d", "weight": 0.16, "direction": "asc"}, + {"field": "total_mv_billion", "weight": 0.12, "direction": "desc"}, + ], "limit": 20, "min_score": 0.52, + }, + }, + { + "name": "ROIC质量低波", + "description": "以投入资本回报、毛利率和估值为核心,寻找低波动的高质量公司。", + "regimes": ["ice", "repair", "divergence", "retreat"], + "formula": { + "meta": {"library": "curated", "category": "质量价值", "quality": "A-", "frequency": "月度", "risk": "中低", "data_group": "估值与财务"}, + "universe": {"exclude_st": True, "listed_days_min": 730}, + "filters": [ + {"field": "roic", "op": ">=", "value": 6}, + {"field": "gross_margin", "op": ">=", "value": 15}, + {"field": "pe_ttm", "op": "between", "value": [1, 45]}, + {"field": "amount_billion", "op": ">=", "value": 1}, + ], + "score": [ + {"field": "roic", "weight": 0.28, "direction": "desc"}, + {"field": "gross_margin", "weight": 0.22, "direction": "desc"}, + {"field": "ps_ttm", "weight": 0.18, "direction": "asc"}, + {"field": "volatility_10d", "weight": 0.18, "direction": "asc"}, + {"field": "total_mv_billion", "weight": 0.14, "direction": "desc"}, + ], "limit": 20, "min_score": 0.54, + }, + }, + { + "name": "低估值现金流白马", + "description": "筛选估值克制、经营现金流健康、资产回报稳定的大中型公司。", + "regimes": ["ice", "repair", "divergence", "retreat"], + "formula": { + "meta": {"library": "curated", "category": "现金流价值", "quality": "A-", "frequency": "月度", "risk": "中低", "data_group": "估值与财务"}, + "universe": {"exclude_st": True, "listed_days_min": 730}, + "filters": [ + {"field": "pb", "op": "between", "value": [0.1, 1.8]}, + {"field": "roa", "op": ">=", "value": 3}, + {"field": "ocf_to_opincome", "op": ">", "value": 0}, + {"field": "netprofit_yoy", "op": ">=", "value": -15}, + {"field": "total_mv_billion", "op": ">=", "value": 100}, + ], + "score": [ + {"field": "roa", "weight": 0.26, "direction": "desc"}, + {"field": "ocf_to_opincome", "weight": 0.24, "direction": "desc"}, + {"field": "pb", "weight": 0.20, "direction": "asc"}, + {"field": "total_mv_billion", "weight": 0.16, "direction": "desc"}, + {"field": "volatility_10d", "weight": 0.14, "direction": "asc"}, + ], "limit": 20, "min_score": 0.53, + }, + }, + { + "name": "高增长合理估值", + "description": "在收入和利润同步增长的公司中,优先选择估值合理、趋势得到确认的标的。", + "regimes": ["repair", "fermentation", "divergence"], + "formula": { + "meta": {"library": "curated", "category": "成长质量", "quality": "B+", "frequency": "月度", "risk": "中", "data_group": "估值与财务"}, + "universe": {"exclude_st": True, "listed_days_min": 365}, + "filters": [ + {"field": "pe_ttm", "op": "between", "value": [1, 35]}, + {"field": "revenue_yoy", "op": ">=", "value": 10}, + {"field": "netprofit_yoy", "op": ">=", "value": 15}, + {"field": "roe", "op": ">=", "value": 5}, + {"field": "amount_billion", "op": ">=", "value": 1}, + ], + "score": [ + {"field": "netprofit_yoy", "weight": 0.27, "direction": "desc"}, + {"field": "revenue_yoy", "weight": 0.23, "direction": "desc"}, + {"field": "roe", "weight": 0.20, "direction": "desc"}, + {"field": "pe_ttm", "weight": 0.16, "direction": "asc"}, + {"field": "relative_strength", "weight": 0.14, "direction": "desc"}, + ], "limit": 20, "min_score": 0.55, + }, + }, + { + "name": "行业宽度主线", + "description": "从行业站上20日线的覆盖率和板块强度出发,筛选主线中的强势个股。", + "regimes": ["repair", "fermentation", "climax", "divergence"], + "formula": { + "meta": {"library": "curated", "category": "行业轮动", "quality": "B+", "frequency": "每周", "risk": "中", "data_group": "行情与行业"}, + "universe": {"exclude_st": True, "listed_days_min": 180}, + "filters": [ + {"field": "sector_breadth_ma20", "op": ">=", "value": 55}, + {"field": "sector_strength", "op": ">=", "value": 55}, + {"field": "above_ma20", "op": "==", "value": 1}, + {"field": "amount_billion", "op": ">=", "value": 2}, + ], + "score": [ + {"field": "sector_breadth_ma20", "weight": 0.28, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.24, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.20, "direction": "desc"}, + {"field": "sector_limit_count", "weight": 0.16, "direction": "desc"}, + {"field": "amount_billion", "weight": 0.12, "direction": "desc"}, + ], "limit": 20, "min_score": 0.56, + }, + }, + { + "name": "首板低开", + "description": "昨日首板且位置不高,次日竞价温和低开并具备成交承载时进入候选。", + "regimes": ["ice", "repair", "divergence"], + "formula": { + "meta": {"library": "curated", "category": "短线竞价", "quality": "B+", "frequency": "每日9:25", "risk": "高", "data_group": "行情与竞价"}, + "universe": {"exclude_st": True, "listed_days_min": 250}, + "filters": [ + {"field": "previous_first_limit", "op": "==", "value": 1}, + {"field": "auction_change", "op": "between", "value": [-4.5, -2.5]}, + {"field": "relative_position_60", "op": "<=", "value": 0.55}, + {"field": "previous_amount_billion", "op": ">=", "value": 1}, + ], + "score": [ + {"field": "auction_amount_million", "weight": 0.28, "direction": "desc"}, + {"field": "previous_amount_billion", "weight": 0.24, "direction": "desc"}, + {"field": "relative_position_60", "weight": 0.20, "direction": "asc"}, + {"field": "sector_strength", "weight": 0.16, "direction": "desc"}, + {"field": "auction_volume_ratio", "weight": 0.12, "direction": "desc"}, + ], "limit": 12, "min_score": 0.50, + }, + }, + { + "name": "小碎步临界突破", + "description": "寻找近期窄幅爬升、接近阶段高点且具备历史活跃记忆的突破候选。", + "regimes": ["repair", "fermentation", "divergence"], + "formula": { + "meta": {"library": "curated", "category": "形态突破", "quality": "B+", "frequency": "每日", "risk": "中高", "data_group": "历史行情"}, + "universe": {"exclude_st": True, "listed_days_min": 250}, + "filters": [ + {"field": "no_limit_30d", "op": "==", "value": 1}, + {"field": "had_limit_80d", "op": "==", "value": 1}, + {"field": "max_abs_change_15d", "op": "<=", "value": 3}, + {"field": "close_to_high_15d", "op": ">=", "value": 0.98}, + {"field": "close_to_high_60d", "op": ">=", "value": 0.90}, + ], + "score": [ + {"field": "close_to_high_15d", "weight": 0.26, "direction": "desc"}, + {"field": "volume_ratio_5d", "weight": 0.22, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.20, "direction": "desc"}, + {"field": "max_abs_change_15d", "weight": 0.18, "direction": "asc"}, + {"field": "circ_mv_billion", "weight": 0.14, "direction": "asc"}, + ], "limit": 15, "min_score": 0.54, + }, + }, + { + "name": "连板龙头", + "description": "从昨日连板梯队中按高度、板块热度和成交承载筛选辨识度前排。", + "regimes": ["fermentation", "climax", "divergence"], + "formula": { + "meta": {"library": "curated", "category": "连板接力", "quality": "B", "frequency": "每日", "risk": "很高", "data_group": "涨停结构"}, + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "previous_limit_streak", "op": ">=", "value": 2}, + {"field": "previous_amount_billion", "op": ">=", "value": 1}, + ], + "score": [ + {"field": "previous_limit_streak", "weight": 0.34, "direction": "desc"}, + {"field": "sector_limit_count", "weight": 0.24, "direction": "desc"}, + {"field": "previous_amount_billion", "weight": 0.18, "direction": "desc"}, + {"field": "turnover_rate", "weight": 0.14, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.10, "direction": "desc"}, + ], "limit": 10, "min_score": 0.50, + }, + }, + { + "name": "微盘三正", + "description": "以正估值、正盈利和正经营现金流约束微盘暴露,保留明确风险提示。", + "regimes": ["repair", "fermentation"], + "formula": { + "meta": {"library": "curated", "category": "小盘质量", "quality": "B", "frequency": "每周", "risk": "高", "data_group": "估值与财务"}, + "universe": {"exclude_st": True, "listed_days_min": 365}, + "filters": [ + {"field": "pb", "op": ">", "value": 0}, + {"field": "roe", "op": ">", "value": 0}, + {"field": "ocf_to_opincome", "op": ">", "value": 0}, + {"field": "circ_mv_billion", "op": "between", "value": [5, 100]}, + {"field": "amount_billion", "op": ">=", "value": 0.5}, + ], + "score": [ + {"field": "circ_mv_billion", "weight": 0.32, "direction": "asc"}, + {"field": "roe", "weight": 0.24, "direction": "desc"}, + {"field": "ocf_to_opincome", "weight": 0.20, "direction": "desc"}, + {"field": "turnover_rate", "weight": 0.14, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.10, "direction": "desc"}, + ], "limit": 20, "min_score": 0.52, + }, + }, + { + "name": "首板高开弱转强", + "description": "昨日涨停或触板后,使用9:25最终竞价涨幅、量比和板块承接确认强度。", + "regimes": ["repair", "fermentation", "divergence"], + "formula": { + "meta": {"library": "curated", "category": "短线竞价", "quality": "B-", "frequency": "每日9:25", "risk": "高", "data_group": "行情与竞价"}, + "universe": {"exclude_st": True, "listed_days_min": 120}, + "filters": [ + {"field": "previous_limit_signal", "op": "==", "value": 1}, + {"field": "auction_change", "op": "between", "value": [1, 6]}, + {"field": "auction_volume_ratio", "op": ">=", "value": 0.8}, + {"field": "previous_amount_billion", "op": "between", "value": [3, 25]}, + ], + "score": [ + {"field": "auction_amount_million", "weight": 0.28, "direction": "desc"}, + {"field": "auction_volume_ratio", "weight": 0.24, "direction": "desc"}, + {"field": "auction_change", "weight": 0.18, "direction": "desc"}, + {"field": "sector_strength", "weight": 0.17, "direction": "desc"}, + {"field": "relative_strength", "weight": 0.13, "direction": "desc"}, + ], "limit": 15, "min_score": 0.52, + }, + }, +] + +CURATED_STRATEGIES.extend(ADVANCED_CURATED_STRATEGIES) + +STRATEGY_ENVIRONMENT_NOTES = { + "连续分红质量": ( + "防守市、低利率环境与中长期配置窗口", + "风险偏好快速上升时,稳健资产的价格弹性通常落后", + ), + "ROIC质量低波": ( + "震荡偏弱、重视盈利质量与回撤控制的市场", + "主题快速扩散或高弹性行情中,低波筛选可能错过进攻方向", + ), + "低估值现金流白马": ( + "估值修复、价值回归及防守配置阶段", + "低估值可能来自基本面持续走弱,需警惕价值陷阱", + ), + "高增长合理估值": ( + "业绩驱动、成长风格占优且趋势获得确认的阶段", + "增长预期下修或估值快速收缩时,回撤可能明显放大", + ), + "行业宽度主线": ( + "主线清晰、行业内部多数个股同步走强的行情", + "板块快速轮动时,宽度信号容易在确认后迅速衰减", + ), + "首板低开": ( + "情绪修复期的分歧转一致与首板次日承接", + "退潮加速或低开缺少量能承接时,弱势可能继续扩大", + ), + "小碎步临界突破": ( + "趋势蓄势、波动收敛后临近突破的结构市", + "无量突破或指数剧烈震荡时,容易形成冲高回落", + ), + "连板龙头": ( + "高度拓展、题材梯队完整且接力情绪活跃的阶段", + "亏钱效应扩散或高位股集中退潮时,接力风险很高", + ), + "微盘三正": ( + "小盘风格活跃、流动性宽松且风险偏好较高的行情", + "风格切向大盘或微盘流动性收缩时,组合波动会显著上升", + ), + "首板高开弱转强": ( + "竞价承接明确、短线情绪修复或主线发酵阶段", + "高开缺乏板块共振时,竞价强势可能转为盘中兑现", + ), + "中期动量·强者恒强": ( + "趋势延续、主升段及强弱分化清晰的行情", + "无趋势震荡或快速轮动中,动量信号容易反复失效", + ), + "强者回调": ( + "主升趋势未破、强势股完成良性回踩的窗口", + "趋势已反转时,回调信号可能演变为下跌中继", + ), + "超跌反转": ( + "急跌后恐慌释放充分、市场进入修复预期的阶段", + "单边下跌初段容易过早介入,超跌不等于止跌", + ), + "相对强度新高": ( + "指数偏弱但结构性主线明确,或机构抱团强化的行情", + "基准快速补涨或强势方向瓦解时,相对优势可能迅速消失", + ), + "均线多头排列": ( + "中期趋势向上、回撤有序的趋势市与主升段", + "高位趋势末端或宽幅震荡中,均线信号通常反应滞后", + ), + "唐奇安通道突破": ( + "整理末端、放量突破并启动新趋势的行情", + "无量突破和宽幅震荡环境中,假突破出现概率较高", + ), + "周线趋势·日线买点": ( + "中期趋势稳定、日线回踩或再启动的多周期共振阶段", + "周线拐点尚未确认时,日线信号可能只是短暂反抽", + ), + "空间板": ( + "市场高度持续拓展、板块梯队完整的强接力环境", + "高度压缩或亏钱效应扩散时,最高板的补跌风险极高", + ), + "龙头首阴": ( + "主线龙头仍有辨识度、首次分歧后存在回流预期的阶段", + "题材退潮或龙头地位被替代后,首阴可能只是下跌起点", + ), + "断板反包": ( + "强势题材分歧后快速修复、核心股重新获得资金承接时", + "板块强度不足或反包缩量时,形态持续性通常较弱", + ), + "核按钮反核": ( + "恐慌释放后出现明确承接、短线情绪转暖的窗口", + "系统性退潮中深水拉回可能只是日内脉冲,隔日风险较高", + ), + "行业动量轮动": ( + "主线相对清晰、行业趋势能够延续两周以上的结构市", + "行业轮动速度过快或前三名差距很小时,动量优势容易迅速衰减", + ), + "主力资金行业流入": ( + "板块轮动初期、资金先于价格形成连续净流入的阶段", + "资金流口径可能受大宗交易和短期对倒影响,单日突增不代表趋势", + ), + "景气-趋势-拥挤三维行业打分": ( + "行业景气与价格趋势同向、但交易拥挤尚未达到极端的结构市", + "财务披露存在滞后,行业快速反转时三维综合分可能反应偏慢", + ), + "大小盘/成长价值风格切换(元策略)": ( + "大小盘或成长价值风格形成持续相对强弱的阶段", + "风格快速往返切换时,近20日相对表现容易产生滞后信号", + ), + "业绩超预期漂移(SUE/PEAD)": ( + "业绩披露窗口中,快报相对预告继续上修且价格尚未充分兑现时", + "预告与快报口径可能不同,公告后高开兑现会削弱漂移效应", + ), + "多因子综合打分(IC动态加权)": ( + "因子表现具备一定延续性、市场并非由单一极端主题主导时", + "近期有效因子可能快速失效,动态权重不能消除风格突变风险", + ), + "热度突增潜伏(另类数据)": ( + "人气快速抬升但股价尚未明显启动的题材萌芽与扩散初期", + "榜单热度可能由短期讨论驱动,缺少价格确认时误报率较高", + ), + "机构榜溢价": ( + "机构专用席位在相对低位形成明确净买入、且成交承载正常时", + "高位机构榜可能对应兑现或对倒,席位净买入不等于持续锁仓", + ), +} + +for strategy in CURATED_STRATEGIES: + suitable_environment, failure_risk = STRATEGY_ENVIRONMENT_NOTES[strategy["name"]] + strategy["formula"]["meta"].update( + { + "suitable_environment": suitable_environment, + "failure_risk": failure_risk, + } + ) + +BUILTIN_STRATEGIES.extend(CURATED_STRATEGIES) diff --git a/backend/features/screener/compiler.py b/backend/features/screener/compiler.py index 167a473..445da26 100644 --- a/backend/features/screener/compiler.py +++ b/backend/features/screener/compiler.py @@ -4,7 +4,7 @@ import json from typing import Any from backend.llm import transport as llm_transport -from backend.features.screener.engine import FACTOR_FIELDS, REGIMES +from backend.features.screener.catalog import FACTOR_FIELDS, REGIMES class LLMCompilerError(RuntimeError): diff --git a/backend/features/screener/data_sync.py b/backend/features/screener/data_sync.py new file mode 100644 index 0000000..6680fbe --- /dev/null +++ b/backend/features/screener/data_sync.py @@ -0,0 +1,342 @@ +from __future__ import annotations + +import statistics +from datetime import datetime, timedelta +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.data.providers.tushare_client import TushareClient, TushareError +from backend.features.screener.indicators import _optional_number +from database import ReviewDatabase + + +def _quarter_periods(trade_date: str, count: int) -> list[str]: + current = datetime.strptime(trade_date, "%Y%m%d") + quarter_ends = ((3, 31), (6, 30), (9, 30), (12, 31)) + periods = [] + year = current.year + while len(periods) < count: + for month, day in reversed(quarter_ends): + value = datetime(year, month, day) + if value <= current: + periods.append(value.strftime("%Y%m%d")) + if len(periods) == count: + break + year -= 1 + return sorted(periods) + + +def _earnings_event_rows( + forecasts: list[dict[str, Any]], expresses: list[dict[str, Any]], trade_date: str, +) -> list[dict[str, Any]]: + forecast_map: dict[tuple[str, str], dict[str, Any]] = {} + for row in forecasts: + key = (str(row.get("ts_code") or ""), str(row.get("end_date") or "")) + ann_date = str(row.get("ann_date") or "") + if not all(key) or not ann_date or ann_date > trade_date: + continue + previous = forecast_map.get(key) + if previous is None or ann_date > str(previous.get("ann_date") or ""): + forecast_map[key] = row + result = [] + for row in expresses: + ts_code = str(row.get("ts_code") or "") + end_date = str(row.get("end_date") or "") + ann_date = str(row.get("ann_date") or "") + forecast = forecast_map.get((ts_code, end_date)) + if not forecast or not ts_code or not end_date or not ann_date or ann_date > trade_date: + continue + lower = _optional_number(forecast.get("net_profit_min")) + upper = _optional_number(forecast.get("net_profit_max")) + forecast_profit = statistics.fmean( + value for value in (lower, upper) if value is not None + ) if lower is not None or upper is not None else None + actual_profit = _optional_number(row.get("n_income")) + if forecast_profit in (None, 0) or actual_profit is None: + continue + # forecast is reported in ten-thousand yuan while express uses yuan. + if abs(actual_profit) > max(abs(forecast_profit), 1) * 100: + actual_profit /= 10000 + surprise_pct = (actual_profit / forecast_profit - 1) * 100 + result.append( + { + "end_date": end_date, + "ann_date": ann_date, + "ts_code": ts_code, + "forecast_profit": forecast_profit, + "actual_profit": actual_profit, + "surprise_pct": surprise_pct, + "revenue_yoy": _optional_number(row.get("yoy_sales")), + "netprofit_yoy": _optional_number(row.get("yoy_net_profit")), + "source": "forecast+express", + } + ) + return result + + +def _popularity_factor_rows( + trade_date: str, + ths_rows: list[dict[str, Any]], + dc_rows: list[dict[str, Any]], + previous_ths: list[dict[str, Any]], + previous_dc: list[dict[str, Any]], +) -> list[dict[str, Any]]: + def ranks(rows: list[dict[str, Any]], data_type: str) -> dict[str, int]: + result = {} + for row in rows: + if data_type and str(row.get("data_type") or "") != data_type: + continue + ts_code = str(row.get("ts_code") or "") + rank = int(_number(row.get("rank"))) + if ts_code and rank > 0: + result[ts_code] = rank + return result + + ths = ranks(ths_rows, "热股") + dc = ranks(dc_rows, "A股市场") + previous_ths_map = ranks(previous_ths, "热股") + previous_dc_map = ranks(previous_dc, "A股市场") + result = [] + for ts_code in set(ths) | set(dc): + ths_rank = ths.get(ts_code) + dc_rank = dc.get(ts_code) + current_best = min(value for value in (ths_rank, dc_rank) if value is not None) + previous_candidates = [ + value for value in (previous_ths_map.get(ts_code), previous_dc_map.get(ts_code)) + if value is not None + ] + previous_best = min(previous_candidates) if previous_candidates else None + score = (101 - (ths_rank or 101)) * 0.5 + (201 - (dc_rank or 201)) * 0.25 + result.append( + { + "trade_date": trade_date, + "ts_code": ts_code, + "ths_rank": ths_rank, + "dc_rank": dc_rank, + "combined_score": round(score, 2), + "rank_change": ( + previous_best - current_best + if previous_best is not None + else min(30, max(0, 31 - current_best)) + if previous_ths_map or previous_dc_map else 0 + ), + "dual_source": bool(ths_rank and dc_rank), + } + ) + return result + + +class FactorDataService: + def __init__(self, database: ReviewDatabase, client: TushareClient) -> None: + self.database = database + self.client = client + + def sync(self, requested_date: str, lookback: int = 45) -> dict[str, Any]: + lookback = max(25, min(260, int(lookback))) + trade_date, _ = self.client.resolve_trade_context(requested_date) + end = datetime.strptime(trade_date, "%Y%m%d") + start = (end - timedelta(days=max(100, lookback * 2 + 20))).strftime("%Y%m%d") + calendar = self.client.query( + "trade_cal", + {"exchange": "SSE", "start_date": start, "end_date": trade_date, "is_open": 1}, + "cal_date,is_open", + ) + dates = sorted(row["cal_date"] for row in calendar if row.get("is_open") == 1)[-lookback:] + existing = set(self.database.factor_dates(trade_date, lookback + 10)) + dates_to_fetch = [value for value in dates if value not in existing or value == trade_date] + auction_source_dates = dates[-min(80, len(dates)):] + existing_auction = set(self.database.auction_factor_dates(trade_date, 90)) + auction_dates_to_fetch = [ + value for value in auction_source_dates + if value not in existing_auction or value == trade_date + ] + long_calendar = self.client.query( + "trade_cal", + { + "exchange": "SSE", + "start_date": datetime(end.year - 5, 1, 1).strftime("%Y%m%d"), + "end_date": trade_date, + "is_open": 1, + }, + "cal_date,is_open", + ) + last_open_by_year: dict[str, str] = {} + last_open_by_month: dict[str, str] = {} + for row in long_calendar: + if row.get("is_open") == 1 and row.get("cal_date"): + value = str(row["cal_date"]) + last_open_by_year[value[:4]] = max(last_open_by_year.get(value[:4], ""), value) + last_open_by_month[value[:6]] = max(last_open_by_month.get(value[:6], ""), value) + valuation_dates = set(dates[-min(80, len(dates)):]) + valuation_dates.update(last_open_by_year.values()) + valuation_dates.update(last_open_by_month.values()) + existing_indicators = set(self.database.daily_indicator_dates(trade_date, 500)) + indicator_dates_to_fetch = sorted( + value for value in valuation_dates if value not in existing_indicators or value == trade_date + ) + + master = self.client.query( + "stock_basic", + {"list_status": "L"}, + "ts_code,name,industry,market,list_date", + ) + master_count = self.database.upsert_stock_master(master) + bar_count = 0 + for current_date in dates_to_fetch: + rows = self.client.query( + "daily", + {"trade_date": current_date}, + "ts_code,trade_date,open,high,low,close,pct_chg,vol,amount", + ) + bar_count += self.database.upsert_daily_bars(rows) + + indicator_count = 0 + for current_date in indicator_dates_to_fetch: + indicators = self.client.query( + "daily_basic", + {"trade_date": current_date}, + "ts_code,trade_date,turnover_rate,volume_ratio,total_mv,circ_mv," + "pe_ttm,pb,ps_ttm,dv_ttm", + ) + indicator_count += self.database.upsert_daily_indicators(indicators) + + notices = [] + benchmark_count = 0 + try: + benchmark_rows = self.client.query( + "index_daily", + {"ts_code": "000300.SH", "start_date": dates[0], "end_date": trade_date}, + "ts_code,trade_date,close,pct_chg", + ) + benchmark_count = self.database.upsert_benchmark_bars(benchmark_rows) + except TushareError as exc: + notices.append(f"沪深300基准暂不可用:{exc}") + fundamental_count = 0 + existing_periods = set(self.database.fundamental_periods()) + for period in _quarter_periods(trade_date, 9): + if period in existing_periods and period < trade_date[:4] + "0101": + continue + try: + rows = self.client.query( + "fina_indicator_vip", + {"period": period}, + "ts_code,ann_date,end_date,roe,roa,roic,grossprofit_margin," + "netprofit_yoy,or_yoy,ocf_to_opincome", + ) + except TushareError as exc: + notices.append(f"财务质量接口不可用:{exc}") + break + published = [ + row for row in rows + if not row.get("ann_date") or str(row.get("ann_date")) <= trade_date + ] + published.sort(key=lambda row: str(row.get("ann_date") or "")) + fundamental_count += self.database.upsert_fundamental_indicators(published) + auction_count = 0 + auction_dates = 0 + for current_date in auction_dates_to_fetch: + try: + auction_rows = self.client.query( + "stk_auction", + {"trade_date": current_date}, + "ts_code,trade_date,vol,price,amount,pre_close,turnover_rate,volume_ratio,float_share", + ) + if auction_rows: + auction_count += self.database.upsert_auction_factors(auction_rows) + auction_dates += 1 + except TushareError as exc: + notices.append(f"竞价因子接口不可用:{exc}") + break + moneyflow_count = 0 + moneyflow_dates = 0 + for current_date in dates[-min(5, len(dates)):]: + try: + moneyflow = self.client.query( + "moneyflow", + {"trade_date": current_date}, + "ts_code,trade_date,buy_sm_amount,sell_sm_amount,buy_md_amount,sell_md_amount," + "buy_lg_amount,sell_lg_amount,buy_elg_amount,sell_elg_amount,net_mf_amount", + ) + moneyflow_count += self.database.upsert_moneyflow(moneyflow) + if moneyflow: + moneyflow_dates += 1 + except TushareError as exc: + notices.append(f"资金流接口不可用:{exc}") + break + + earnings_count = 0 + forecasts: list[dict[str, Any]] = [] + expresses: list[dict[str, Any]] = [] + for period in _quarter_periods(trade_date, 5): + try: + forecast_rows = self.client.query( + "forecast_vip", + {"period": period}, + "ts_code,ann_date,end_date,net_profit_min,net_profit_max,last_parent_net,p_change_min,p_change_max", + ) + express_rows = self.client.query( + "express_vip", + {"period": period}, + "ts_code,ann_date,end_date,n_income,yoy_net_profit,yoy_sales", + ) + except TushareError as exc: + notices.append(f"业绩事件接口不可用:{exc}") + break + forecasts.extend(forecast_rows) + expresses.extend(express_rows) + if forecasts and expresses: + earnings_count = self.database.upsert_earnings_events( + _earnings_event_rows(forecasts, expresses, trade_date) + ) + + popularity_count = 0 + previous_trade_date = dates[-2] if len(dates) >= 2 else "" + try: + ths_rows = self.client.query("ths_hot", {"trade_date": trade_date}) + dc_rows = self.client.query("dc_hot", {"trade_date": trade_date}) + previous_ths = ( + self.client.query("ths_hot", {"trade_date": previous_trade_date}) + if previous_trade_date else [] + ) + previous_dc = ( + self.client.query("dc_hot", {"trade_date": previous_trade_date}) + if previous_trade_date else [] + ) + popularity_count = self.database.upsert_popularity_factors( + _popularity_factor_rows( + trade_date, ths_rows, dc_rows, previous_ths, previous_dc + ) + ) + except TushareError as exc: + notices.append(f"人气榜因子不可用:{exc}") + + institution_count = 0 + try: + institution_rows = self.client.query( + "top_inst", + {"trade_date": trade_date}, + "trade_date,ts_code,exalter,buy,sell,net_buy,side,reason", + ) + institution_count = self.database.upsert_lhb_institutions(institution_rows) + except TushareError as exc: + notices.append(f"机构席位明细不可用:{exc}") + + return { + "trade_date": trade_date, + "calendar_dates": len(dates), + "fetched_dates": len(dates_to_fetch), + "stocks": master_count, + "bars": bar_count, + "benchmark_bars": benchmark_count, + "indicators": indicator_count, + "indicator_dates": len(indicator_dates_to_fetch), + "fundamentals": fundamental_count, + "moneyflow": moneyflow_count, + "moneyflow_dates": moneyflow_dates, + "auction_rows": auction_count, + "auction_dates": auction_dates, + "earnings_events": earnings_count, + "popularity_rows": popularity_count, + "institution_rows": institution_count, + "notice": ";".join(notices), + } diff --git a/backend/features/screener/engine.py b/backend/features/screener/engine.py index 7d7baf9..0d56dac 100644 --- a/backend/features/screener/engine.py +++ b/backend/features/screener/engine.py @@ -1,1061 +1,71 @@ from __future__ import annotations -import copy -import json -import math -import statistics -from collections import defaultdict -from datetime import datetime, timedelta from typing import Any from backend.bootstrap.config import display_compact_date as _display_date from backend.data.numbers import finite_number as _number -from backend.data.providers.tushare_client import TushareClient, TushareError -from backend.features.screener.strategies import ADVANCED_CURATED_STRATEGIES +from backend.features.screener.backtest import BacktestRunner +from backend.features.screener.catalog import ( + ADVANCED_CURATED_STRATEGIES, + ALLOWED_OPERATORS, + BUILTIN_STRATEGIES, + CURATED_STRATEGIES, + FACTOR_FIELDS, + FACTOR_GROUPS, + REGIMES, + STRATEGY_ENVIRONMENT_NOTES, +) +from backend.features.screener.data_sync import ( + FactorDataService, + _earnings_event_rows, + _popularity_factor_rows, + _quarter_periods, +) +from backend.features.screener.factors import FactorBuilder +from backend.features.screener.formula import FormulaEvaluator, compile_local_strategy +from backend.features.screener.indicators import ( + _available_percentile_map, + _broken_reversal_metrics, + _ema, + _ending_streak, + _is_limit_bar, + _limit_threshold, + _macd_last, + _macd_series, + _matches, + _max_streak, + _optional_number, + _pearson, + _percentile_map, + _regime_reason, + _risk_flags, + _rounded_optional, + _rsi, + _touched_limit_bar, + _weekly_series, +) +from backend.features.screener.regime import RegimeDetector +from backend.features.screener.selection import SelectionRunner from database import ReviewDatabase -from backend.features.sentiment.engine import build_sentiment_history, latest_contiguous_history - - -REGIMES = { - "ice": "冰点", - "repair": "修复", - "fermentation": "发酵", - "climax": "高潮", - "divergence": "分化", - "retreat": "退潮", -} - -FACTOR_FIELDS = { - "close": "收盘价", - "pct_chg": "当日涨幅", - "return_5d": "5日涨幅", - "return_10d": "10日涨幅", - "return_20d": "20日涨幅", - "return_60d": "60日涨幅", - "return_5d_rank": "5日涨幅排名", - "momentum_60_5": "中期动量", - "momentum_60_5_rank": "中期动量排名", - "above_ma20": "站上20日线", - "rsi_6": "RSI(6)", - "ma60_slope": "60日线斜率", - "ma20_slope_5d": "20日线5日斜率", - "ma_bull_alignment": "均线多头排列", - "drawdown_from_high_250": "距250日高点回撤", - "donchian_breakout_pct": "唐奇安突破幅度", - "range_20d": "20日振幅", - "rs_high_120": "RS线120日新高", - "excess_return_60d": "60日超额收益", - "weekly_trend_signal": "周线趋势信号", - "daily_buy_trigger": "日线买点", - "weekly_amount_trend": "周成交趋势", - "volume_ratio_5d": "5日量比", - "turnover_5d": "5日累计换手", - "volatility_10d": "10日波动率", - "amount_billion": "成交额", - "turnover_rate": "换手率", - "circ_mv_billion": "流通市值", - "net_flow_million": "主力净流入", - "large_flow_million": "大单净流入", - "net_flow_5d_million": "5日主力净流入", - "flow_to_circ_mv_5d": "5日净流入占流通市值", - "sector_strength": "板块强度", - "sector_return_5d": "行业5日涨幅", - "sector_return_20d": "行业20日涨幅", - "sector_momentum_rank": "行业20日动量排名", - "sector_stock_momentum_rank": "行业内个股动量排名", - "sector_net_flow_5d_million": "行业5日主力净流入", - "sector_flow_rank": "行业资金流排名", - "sector_prosperity_rank": "行业景气度排名", - "sector_trend_rank": "行业趋势排名", - "sector_crowding_rank": "行业拥挤度排名", - "sector_composite_score": "行业三维综合分", - "sector_limit_count": "板块涨停数", - "sector_up_count": "板块强势股数", - "relative_strength": "相对强度", - "limit_streak": "连板高度", - "auction_change": "竞价涨幅", - "auction_amount_million": "竞价成交额", - "auction_turnover_rate": "竞价换手率", - "auction_volume_ratio": "竞价量比", - "total_mv_billion": "总市值", - "pe_ttm": "市盈率TTM", - "pb": "市净率", - "ps_ttm": "市销率TTM", - "dividend_yield_ttm": "股息率TTM", - "dividend_years": "近年持续分红", - "roe": "净资产收益率", - "roa": "总资产收益率", - "roic": "投入资本回报率", - "gross_margin": "销售毛利率", - "netprofit_yoy": "净利润同比", - "revenue_yoy": "营业收入同比", - "ocf_to_opincome": "经营现金流质量", - "earnings_surprise_pct": "业绩超预期幅度", - "earnings_days_since_announce": "业绩公告后天数", - "earnings_event_quality": "业绩事件质量", - "popularity_score": "人气榜热度", - "popularity_rank_change": "人气排名跃升", - "popularity_dual_source": "双榜共识", - "institution_net_buy_million": "机构席位净买入", - "institution_seat_count": "机构席位数", - "style_size_fit": "大小盘风格匹配", - "style_growth_fit": "成长价值风格匹配", - "style_fit_score": "当前风格匹配度", - "factor_value_score": "价值因子分", - "factor_growth_score": "成长因子分", - "factor_quality_score": "质量因子分", - "factor_momentum_score": "动量因子分", - "factor_sentiment_score": "交易情绪因子分", - "multi_factor_composite": "动态多因子综合分", - "relative_position_60": "60日相对位置", - "max_abs_change_15d": "15日最大波动", - "close_to_high_15d": "距15日高点", - "close_to_high_60d": "距60日高点", - "no_limit_30d": "近30日无涨停", - "had_limit_80d": "近80日曾涨停", - "previous_first_limit": "昨日首板", - "previous_limit_signal": "昨日涨停或触板", - "previous_limit_streak": "昨日连板高度", - "previous_amount_billion": "昨日成交额", - "is_limit_up_today": "当日涨停", - "is_limit_down_today": "当日跌停", - "sector_breadth_ma20": "行业20日线宽度", - "no_limit_down_20d": "近20日无跌停", - "financial_risk": "财务风险标记", - "is_market_height": "当前市场最高板", - "new_space_board": "新晋空间板", - "max_continuous_board_10d": "近10日最高连板", - "dragon_first_yin": "龙头首阴", - "yin_day_pct": "首阴跌幅", - "vol_vs_previous": "较前日量能", - "broken_reversal": "断板反包", - "days_since_broken": "断板后天数", - "close_above_broken_high": "收复断板高点", - "vol_vs_broken_day": "较断板日量能", - "recent_limit_up_5d": "近5日涨停次数", - "intraday_min_pct": "盘中最大跌幅", - "lower_shadow_ratio": "下影线实体比", -} - -FACTOR_GROUPS = { - "行情动量": [ - "close", "pct_chg", "return_5d", "return_10d", "return_20d", "return_60d", - "return_5d_rank", "momentum_60_5", "momentum_60_5_rank", "above_ma20", - "rsi_6", "ma60_slope", "ma20_slope_5d", "ma_bull_alignment", - "drawdown_from_high_250", "donchian_breakout_pct", "range_20d", - "rs_high_120", "excess_return_60d", "weekly_trend_signal", - "daily_buy_trigger", "weekly_amount_trend", "relative_strength", - "relative_position_60", "close_to_high_15d", "close_to_high_60d", - ], - "量价交易": [ - "volume_ratio_5d", "turnover_5d", "volatility_10d", "amount_billion", "turnover_rate", - "net_flow_million", "large_flow_million", "net_flow_5d_million", - "flow_to_circ_mv_5d", "previous_amount_billion", - "intraday_min_pct", "lower_shadow_ratio", "vol_vs_previous", "vol_vs_broken_day", - ], - "板块结构": [ - "sector_strength", "sector_return_5d", "sector_return_20d", "sector_momentum_rank", - "sector_stock_momentum_rank", "sector_net_flow_5d_million", "sector_flow_rank", - "sector_prosperity_rank", "sector_trend_rank", "sector_crowding_rank", - "sector_composite_score", - "sector_limit_count", "sector_up_count", "sector_breadth_ma20", - "limit_streak", "previous_limit_streak", "previous_first_limit", "previous_limit_signal", - "is_limit_up_today", "is_limit_down_today", - "no_limit_30d", "had_limit_80d", "max_abs_change_15d", "no_limit_down_20d", - "is_market_height", "new_space_board", "max_continuous_board_10d", - "dragon_first_yin", "yin_day_pct", "broken_reversal", "days_since_broken", - "close_above_broken_high", "recent_limit_up_5d", - ], - "竞价因子": [ - "auction_change", "auction_amount_million", "auction_turnover_rate", "auction_volume_ratio", - ], - "估值规模": [ - "circ_mv_billion", "total_mv_billion", "pe_ttm", "pb", "ps_ttm", - "dividend_yield_ttm", "dividend_years", - ], - "财务质量": [ - "roe", "roa", "roic", "gross_margin", "netprofit_yoy", "revenue_yoy", - "ocf_to_opincome", "financial_risk", - "earnings_surprise_pct", "earnings_days_since_announce", "earnings_event_quality", - ], - "特色数据": [ - "popularity_score", "popularity_rank_change", "popularity_dual_source", - "institution_net_buy_million", "institution_seat_count", - "style_size_fit", "style_growth_fit", "style_fit_score", - "factor_value_score", "factor_growth_score", "factor_quality_score", - "factor_momentum_score", "factor_sentiment_score", "multi_factor_composite", - ], -} - -ALLOWED_OPERATORS = {">", ">=", "<", "<=", "==", "!=", "between", "in"} - - -BUILTIN_STRATEGIES = [ - { - "name": "冰点抗跌先手", - "description": "寻找冰点中保持相对强度、低波动且有板块承接的个股,允许无结果。", - "regimes": ["ice"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "pct_chg", "op": "between", "value": [-3, 7]}, - {"field": "return_5d", "op": ">=", "value": -5}, - {"field": "amount_billion", "op": ">=", "value": 1}, - {"field": "volatility_10d", "op": "<=", "value": 7}, - ], - "score": [ - {"field": "relative_strength", "weight": 0.30, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.25, "direction": "desc"}, - {"field": "volume_ratio_5d", "weight": 0.20, "direction": "desc"}, - {"field": "volatility_10d", "weight": 0.15, "direction": "asc"}, - {"field": "amount_billion", "weight": 0.10, "direction": "desc"}, - ], - "limit": 12, - "min_score": 0.58, - }, - }, - { - "name": "修复先锋", - "description": "筛选率先站回趋势、温和放量并获得板块共振的修复前排。", - "regimes": ["repair"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "pct_chg", "op": "between", "value": [1, 9.7]}, - {"field": "return_5d", "op": ">", "value": 0}, - {"field": "above_ma20", "op": "==", "value": 1}, - {"field": "volume_ratio_5d", "op": ">=", "value": 1.05}, - ], - "score": [ - {"field": "sector_strength", "weight": 0.28, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.24, "direction": "desc"}, - {"field": "volume_ratio_5d", "weight": 0.18, "direction": "desc"}, - {"field": "net_flow_million", "weight": 0.16, "direction": "desc"}, - {"field": "amount_billion", "weight": 0.14, "direction": "desc"}, - ], - "limit": 15, - "min_score": 0.54, - }, - }, - { - "name": "主线发酵跟随", - "description": "在主线扩散期寻找趋势、成交承载和板块涨停梯队共同增强的个股。", - "regimes": ["fermentation"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "pct_chg", "op": "between", "value": [0, 9.8]}, - {"field": "return_5d", "op": ">=", "value": 3}, - {"field": "above_ma20", "op": "==", "value": 1}, - {"field": "amount_billion", "op": ">=", "value": 2}, - ], - "score": [ - {"field": "sector_limit_count", "weight": 0.25, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.24, "direction": "desc"}, - {"field": "return_10d", "weight": 0.20, "direction": "desc"}, - {"field": "amount_billion", "weight": 0.16, "direction": "desc"}, - {"field": "large_flow_million", "weight": 0.15, "direction": "desc"}, - ], - "limit": 15, - "min_score": 0.55, - }, - }, - { - "name": "高潮核心去后排", - "description": "高潮阶段只保留容量、趋势和辨识度较高的核心,降低后排跟风权重。", - "regimes": ["climax"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "pct_chg", "op": "between", "value": [-2, 7]}, - {"field": "return_10d", "op": ">=", "value": 5}, - {"field": "above_ma20", "op": "==", "value": 1}, - {"field": "amount_billion", "op": ">=", "value": 5}, - ], - "score": [ - {"field": "amount_billion", "weight": 0.28, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.22, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.20, "direction": "desc"}, - {"field": "volatility_10d", "weight": 0.15, "direction": "asc"}, - {"field": "limit_streak", "weight": 0.15, "direction": "desc"}, - ], - "limit": 10, - "min_score": 0.62, - }, - }, - { - "name": "分化承接回流", - "description": "寻找分化中仍有趋势承接、板块强度和资金回流的核心候选。", - "regimes": ["divergence"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "pct_chg", "op": "between", "value": [-3, 7]}, - {"field": "return_5d", "op": ">", "value": 0}, - {"field": "above_ma20", "op": "==", "value": 1}, - {"field": "volume_ratio_5d", "op": "between", "value": [0.7, 3.5]}, - ], - "score": [ - {"field": "relative_strength", "weight": 0.28, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.24, "direction": "desc"}, - {"field": "net_flow_million", "weight": 0.20, "direction": "desc"}, - {"field": "volatility_10d", "weight": 0.16, "direction": "asc"}, - {"field": "amount_billion", "weight": 0.12, "direction": "desc"}, - ], - "limit": 12, - "min_score": 0.57, - }, - }, - { - "name": "退潮防守观察", - "description": "退潮期采用高门槛防守筛选,结果为空代表当前不宜主动出击。", - "regimes": ["retreat"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 180}, - "filters": [ - {"field": "pct_chg", "op": "between", "value": [-2, 4]}, - {"field": "return_5d", "op": ">=", "value": -2}, - {"field": "above_ma20", "op": "==", "value": 1}, - {"field": "volatility_10d", "op": "<=", "value": 4.5}, - {"field": "amount_billion", "op": ">=", "value": 2}, - ], - "score": [ - {"field": "volatility_10d", "weight": 0.30, "direction": "asc"}, - {"field": "relative_strength", "weight": 0.25, "direction": "desc"}, - {"field": "amount_billion", "weight": 0.20, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.15, "direction": "desc"}, - {"field": "net_flow_million", "weight": 0.10, "direction": "desc"}, - ], - "limit": 8, - "min_score": 0.68, - }, - }, - { - "name": "竞价强势确认", - "description": "用竞价涨幅、成交承载和量比确认修复或发酵阶段的主动进攻标的。", - "regimes": ["repair", "fermentation", "divergence"], - "formula": { - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "auction_change", "op": "between", "value": [1, 7]}, - {"field": "auction_amount_million", "op": ">=", "value": 3}, - {"field": "auction_volume_ratio", "op": ">=", "value": 0.8}, - {"field": "amount_billion", "op": ">=", "value": 1}, - ], - "score": [ - {"field": "auction_amount_million", "weight": 0.26, "direction": "desc"}, - {"field": "auction_volume_ratio", "weight": 0.22, "direction": "desc"}, - {"field": "auction_change", "weight": 0.18, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.18, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.16, "direction": "desc"}, - ], - "limit": 15, - "min_score": 0.56, - }, - }, -] - -for _strategy in BUILTIN_STRATEGIES: - _strategy["formula"].setdefault("meta", { - "library": "smart", "category": "周期策略", "quality": "系统", - "frequency": "每日", "risk": "随市场阶段", "data_group": "行情因子", - }) - - -CURATED_STRATEGIES = [ - { - "name": "连续分红质量", - "description": "寻找持续派息、盈利质量稳定且波动可控的长期现金回报型公司。", - "regimes": list(REGIMES), - "formula": { - "meta": {"library": "curated", "category": "红利价值", "quality": "A", "frequency": "月度", "risk": "中低", "data_group": "估值与财务"}, - "universe": {"exclude_st": True, "listed_days_min": 1095}, - "filters": [ - {"field": "dividend_years", "op": ">=", "value": 4}, - {"field": "dividend_yield_ttm", "op": ">=", "value": 2}, - {"field": "roe", "op": ">=", "value": 6}, - {"field": "pb", "op": "between", "value": [0.1, 4]}, - ], - "score": [ - {"field": "dividend_yield_ttm", "weight": 0.30, "direction": "desc"}, - {"field": "roe", "weight": 0.24, "direction": "desc"}, - {"field": "ocf_to_opincome", "weight": 0.18, "direction": "desc"}, - {"field": "volatility_10d", "weight": 0.16, "direction": "asc"}, - {"field": "total_mv_billion", "weight": 0.12, "direction": "desc"}, - ], "limit": 20, "min_score": 0.52, - }, - }, - { - "name": "ROIC质量低波", - "description": "以投入资本回报、毛利率和估值为核心,寻找低波动的高质量公司。", - "regimes": ["ice", "repair", "divergence", "retreat"], - "formula": { - "meta": {"library": "curated", "category": "质量价值", "quality": "A-", "frequency": "月度", "risk": "中低", "data_group": "估值与财务"}, - "universe": {"exclude_st": True, "listed_days_min": 730}, - "filters": [ - {"field": "roic", "op": ">=", "value": 6}, - {"field": "gross_margin", "op": ">=", "value": 15}, - {"field": "pe_ttm", "op": "between", "value": [1, 45]}, - {"field": "amount_billion", "op": ">=", "value": 1}, - ], - "score": [ - {"field": "roic", "weight": 0.28, "direction": "desc"}, - {"field": "gross_margin", "weight": 0.22, "direction": "desc"}, - {"field": "ps_ttm", "weight": 0.18, "direction": "asc"}, - {"field": "volatility_10d", "weight": 0.18, "direction": "asc"}, - {"field": "total_mv_billion", "weight": 0.14, "direction": "desc"}, - ], "limit": 20, "min_score": 0.54, - }, - }, - { - "name": "低估值现金流白马", - "description": "筛选估值克制、经营现金流健康、资产回报稳定的大中型公司。", - "regimes": ["ice", "repair", "divergence", "retreat"], - "formula": { - "meta": {"library": "curated", "category": "现金流价值", "quality": "A-", "frequency": "月度", "risk": "中低", "data_group": "估值与财务"}, - "universe": {"exclude_st": True, "listed_days_min": 730}, - "filters": [ - {"field": "pb", "op": "between", "value": [0.1, 1.8]}, - {"field": "roa", "op": ">=", "value": 3}, - {"field": "ocf_to_opincome", "op": ">", "value": 0}, - {"field": "netprofit_yoy", "op": ">=", "value": -15}, - {"field": "total_mv_billion", "op": ">=", "value": 100}, - ], - "score": [ - {"field": "roa", "weight": 0.26, "direction": "desc"}, - {"field": "ocf_to_opincome", "weight": 0.24, "direction": "desc"}, - {"field": "pb", "weight": 0.20, "direction": "asc"}, - {"field": "total_mv_billion", "weight": 0.16, "direction": "desc"}, - {"field": "volatility_10d", "weight": 0.14, "direction": "asc"}, - ], "limit": 20, "min_score": 0.53, - }, - }, - { - "name": "高增长合理估值", - "description": "在收入和利润同步增长的公司中,优先选择估值合理、趋势得到确认的标的。", - "regimes": ["repair", "fermentation", "divergence"], - "formula": { - "meta": {"library": "curated", "category": "成长质量", "quality": "B+", "frequency": "月度", "risk": "中", "data_group": "估值与财务"}, - "universe": {"exclude_st": True, "listed_days_min": 365}, - "filters": [ - {"field": "pe_ttm", "op": "between", "value": [1, 35]}, - {"field": "revenue_yoy", "op": ">=", "value": 10}, - {"field": "netprofit_yoy", "op": ">=", "value": 15}, - {"field": "roe", "op": ">=", "value": 5}, - {"field": "amount_billion", "op": ">=", "value": 1}, - ], - "score": [ - {"field": "netprofit_yoy", "weight": 0.27, "direction": "desc"}, - {"field": "revenue_yoy", "weight": 0.23, "direction": "desc"}, - {"field": "roe", "weight": 0.20, "direction": "desc"}, - {"field": "pe_ttm", "weight": 0.16, "direction": "asc"}, - {"field": "relative_strength", "weight": 0.14, "direction": "desc"}, - ], "limit": 20, "min_score": 0.55, - }, - }, - { - "name": "行业宽度主线", - "description": "从行业站上20日线的覆盖率和板块强度出发,筛选主线中的强势个股。", - "regimes": ["repair", "fermentation", "climax", "divergence"], - "formula": { - "meta": {"library": "curated", "category": "行业轮动", "quality": "B+", "frequency": "每周", "risk": "中", "data_group": "行情与行业"}, - "universe": {"exclude_st": True, "listed_days_min": 180}, - "filters": [ - {"field": "sector_breadth_ma20", "op": ">=", "value": 55}, - {"field": "sector_strength", "op": ">=", "value": 55}, - {"field": "above_ma20", "op": "==", "value": 1}, - {"field": "amount_billion", "op": ">=", "value": 2}, - ], - "score": [ - {"field": "sector_breadth_ma20", "weight": 0.28, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.24, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.20, "direction": "desc"}, - {"field": "sector_limit_count", "weight": 0.16, "direction": "desc"}, - {"field": "amount_billion", "weight": 0.12, "direction": "desc"}, - ], "limit": 20, "min_score": 0.56, - }, - }, - { - "name": "首板低开", - "description": "昨日首板且位置不高,次日竞价温和低开并具备成交承载时进入候选。", - "regimes": ["ice", "repair", "divergence"], - "formula": { - "meta": {"library": "curated", "category": "短线竞价", "quality": "B+", "frequency": "每日9:25", "risk": "高", "data_group": "行情与竞价"}, - "universe": {"exclude_st": True, "listed_days_min": 250}, - "filters": [ - {"field": "previous_first_limit", "op": "==", "value": 1}, - {"field": "auction_change", "op": "between", "value": [-4.5, -2.5]}, - {"field": "relative_position_60", "op": "<=", "value": 0.55}, - {"field": "previous_amount_billion", "op": ">=", "value": 1}, - ], - "score": [ - {"field": "auction_amount_million", "weight": 0.28, "direction": "desc"}, - {"field": "previous_amount_billion", "weight": 0.24, "direction": "desc"}, - {"field": "relative_position_60", "weight": 0.20, "direction": "asc"}, - {"field": "sector_strength", "weight": 0.16, "direction": "desc"}, - {"field": "auction_volume_ratio", "weight": 0.12, "direction": "desc"}, - ], "limit": 12, "min_score": 0.50, - }, - }, - { - "name": "小碎步临界突破", - "description": "寻找近期窄幅爬升、接近阶段高点且具备历史活跃记忆的突破候选。", - "regimes": ["repair", "fermentation", "divergence"], - "formula": { - "meta": {"library": "curated", "category": "形态突破", "quality": "B+", "frequency": "每日", "risk": "中高", "data_group": "历史行情"}, - "universe": {"exclude_st": True, "listed_days_min": 250}, - "filters": [ - {"field": "no_limit_30d", "op": "==", "value": 1}, - {"field": "had_limit_80d", "op": "==", "value": 1}, - {"field": "max_abs_change_15d", "op": "<=", "value": 3}, - {"field": "close_to_high_15d", "op": ">=", "value": 0.98}, - {"field": "close_to_high_60d", "op": ">=", "value": 0.90}, - ], - "score": [ - {"field": "close_to_high_15d", "weight": 0.26, "direction": "desc"}, - {"field": "volume_ratio_5d", "weight": 0.22, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.20, "direction": "desc"}, - {"field": "max_abs_change_15d", "weight": 0.18, "direction": "asc"}, - {"field": "circ_mv_billion", "weight": 0.14, "direction": "asc"}, - ], "limit": 15, "min_score": 0.54, - }, - }, - { - "name": "连板龙头", - "description": "从昨日连板梯队中按高度、板块热度和成交承载筛选辨识度前排。", - "regimes": ["fermentation", "climax", "divergence"], - "formula": { - "meta": {"library": "curated", "category": "连板接力", "quality": "B", "frequency": "每日", "risk": "很高", "data_group": "涨停结构"}, - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "previous_limit_streak", "op": ">=", "value": 2}, - {"field": "previous_amount_billion", "op": ">=", "value": 1}, - ], - "score": [ - {"field": "previous_limit_streak", "weight": 0.34, "direction": "desc"}, - {"field": "sector_limit_count", "weight": 0.24, "direction": "desc"}, - {"field": "previous_amount_billion", "weight": 0.18, "direction": "desc"}, - {"field": "turnover_rate", "weight": 0.14, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.10, "direction": "desc"}, - ], "limit": 10, "min_score": 0.50, - }, - }, - { - "name": "微盘三正", - "description": "以正估值、正盈利和正经营现金流约束微盘暴露,保留明确风险提示。", - "regimes": ["repair", "fermentation"], - "formula": { - "meta": {"library": "curated", "category": "小盘质量", "quality": "B", "frequency": "每周", "risk": "高", "data_group": "估值与财务"}, - "universe": {"exclude_st": True, "listed_days_min": 365}, - "filters": [ - {"field": "pb", "op": ">", "value": 0}, - {"field": "roe", "op": ">", "value": 0}, - {"field": "ocf_to_opincome", "op": ">", "value": 0}, - {"field": "circ_mv_billion", "op": "between", "value": [5, 100]}, - {"field": "amount_billion", "op": ">=", "value": 0.5}, - ], - "score": [ - {"field": "circ_mv_billion", "weight": 0.32, "direction": "asc"}, - {"field": "roe", "weight": 0.24, "direction": "desc"}, - {"field": "ocf_to_opincome", "weight": 0.20, "direction": "desc"}, - {"field": "turnover_rate", "weight": 0.14, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.10, "direction": "desc"}, - ], "limit": 20, "min_score": 0.52, - }, - }, - { - "name": "首板高开弱转强", - "description": "昨日涨停或触板后,使用9:25最终竞价涨幅、量比和板块承接确认强度。", - "regimes": ["repair", "fermentation", "divergence"], - "formula": { - "meta": {"library": "curated", "category": "短线竞价", "quality": "B-", "frequency": "每日9:25", "risk": "高", "data_group": "行情与竞价"}, - "universe": {"exclude_st": True, "listed_days_min": 120}, - "filters": [ - {"field": "previous_limit_signal", "op": "==", "value": 1}, - {"field": "auction_change", "op": "between", "value": [1, 6]}, - {"field": "auction_volume_ratio", "op": ">=", "value": 0.8}, - {"field": "previous_amount_billion", "op": "between", "value": [3, 25]}, - ], - "score": [ - {"field": "auction_amount_million", "weight": 0.28, "direction": "desc"}, - {"field": "auction_volume_ratio", "weight": 0.24, "direction": "desc"}, - {"field": "auction_change", "weight": 0.18, "direction": "desc"}, - {"field": "sector_strength", "weight": 0.17, "direction": "desc"}, - {"field": "relative_strength", "weight": 0.13, "direction": "desc"}, - ], "limit": 15, "min_score": 0.52, - }, - }, -] - -CURATED_STRATEGIES.extend(ADVANCED_CURATED_STRATEGIES) - -STRATEGY_ENVIRONMENT_NOTES = { - "连续分红质量": ( - "防守市、低利率环境与中长期配置窗口", - "风险偏好快速上升时,稳健资产的价格弹性通常落后", - ), - "ROIC质量低波": ( - "震荡偏弱、重视盈利质量与回撤控制的市场", - "主题快速扩散或高弹性行情中,低波筛选可能错过进攻方向", - ), - "低估值现金流白马": ( - "估值修复、价值回归及防守配置阶段", - "低估值可能来自基本面持续走弱,需警惕价值陷阱", - ), - "高增长合理估值": ( - "业绩驱动、成长风格占优且趋势获得确认的阶段", - "增长预期下修或估值快速收缩时,回撤可能明显放大", - ), - "行业宽度主线": ( - "主线清晰、行业内部多数个股同步走强的行情", - "板块快速轮动时,宽度信号容易在确认后迅速衰减", - ), - "首板低开": ( - "情绪修复期的分歧转一致与首板次日承接", - "退潮加速或低开缺少量能承接时,弱势可能继续扩大", - ), - "小碎步临界突破": ( - "趋势蓄势、波动收敛后临近突破的结构市", - "无量突破或指数剧烈震荡时,容易形成冲高回落", - ), - "连板龙头": ( - "高度拓展、题材梯队完整且接力情绪活跃的阶段", - "亏钱效应扩散或高位股集中退潮时,接力风险很高", - ), - "微盘三正": ( - "小盘风格活跃、流动性宽松且风险偏好较高的行情", - "风格切向大盘或微盘流动性收缩时,组合波动会显著上升", - ), - "首板高开弱转强": ( - "竞价承接明确、短线情绪修复或主线发酵阶段", - "高开缺乏板块共振时,竞价强势可能转为盘中兑现", - ), - "中期动量·强者恒强": ( - "趋势延续、主升段及强弱分化清晰的行情", - "无趋势震荡或快速轮动中,动量信号容易反复失效", - ), - "强者回调": ( - "主升趋势未破、强势股完成良性回踩的窗口", - "趋势已反转时,回调信号可能演变为下跌中继", - ), - "超跌反转": ( - "急跌后恐慌释放充分、市场进入修复预期的阶段", - "单边下跌初段容易过早介入,超跌不等于止跌", - ), - "相对强度新高": ( - "指数偏弱但结构性主线明确,或机构抱团强化的行情", - "基准快速补涨或强势方向瓦解时,相对优势可能迅速消失", - ), - "均线多头排列": ( - "中期趋势向上、回撤有序的趋势市与主升段", - "高位趋势末端或宽幅震荡中,均线信号通常反应滞后", - ), - "唐奇安通道突破": ( - "整理末端、放量突破并启动新趋势的行情", - "无量突破和宽幅震荡环境中,假突破出现概率较高", - ), - "周线趋势·日线买点": ( - "中期趋势稳定、日线回踩或再启动的多周期共振阶段", - "周线拐点尚未确认时,日线信号可能只是短暂反抽", - ), - "空间板": ( - "市场高度持续拓展、板块梯队完整的强接力环境", - "高度压缩或亏钱效应扩散时,最高板的补跌风险极高", - ), - "龙头首阴": ( - "主线龙头仍有辨识度、首次分歧后存在回流预期的阶段", - "题材退潮或龙头地位被替代后,首阴可能只是下跌起点", - ), - "断板反包": ( - "强势题材分歧后快速修复、核心股重新获得资金承接时", - "板块强度不足或反包缩量时,形态持续性通常较弱", - ), - "核按钮反核": ( - "恐慌释放后出现明确承接、短线情绪转暖的窗口", - "系统性退潮中深水拉回可能只是日内脉冲,隔日风险较高", - ), - "行业动量轮动": ( - "主线相对清晰、行业趋势能够延续两周以上的结构市", - "行业轮动速度过快或前三名差距很小时,动量优势容易迅速衰减", - ), - "主力资金行业流入": ( - "板块轮动初期、资金先于价格形成连续净流入的阶段", - "资金流口径可能受大宗交易和短期对倒影响,单日突增不代表趋势", - ), - "景气-趋势-拥挤三维行业打分": ( - "行业景气与价格趋势同向、但交易拥挤尚未达到极端的结构市", - "财务披露存在滞后,行业快速反转时三维综合分可能反应偏慢", - ), - "大小盘/成长价值风格切换(元策略)": ( - "大小盘或成长价值风格形成持续相对强弱的阶段", - "风格快速往返切换时,近20日相对表现容易产生滞后信号", - ), - "业绩超预期漂移(SUE/PEAD)": ( - "业绩披露窗口中,快报相对预告继续上修且价格尚未充分兑现时", - "预告与快报口径可能不同,公告后高开兑现会削弱漂移效应", - ), - "多因子综合打分(IC动态加权)": ( - "因子表现具备一定延续性、市场并非由单一极端主题主导时", - "近期有效因子可能快速失效,动态权重不能消除风格突变风险", - ), - "热度突增潜伏(另类数据)": ( - "人气快速抬升但股价尚未明显启动的题材萌芽与扩散初期", - "榜单热度可能由短期讨论驱动,缺少价格确认时误报率较高", - ), - "机构榜溢价": ( - "机构专用席位在相对低位形成明确净买入、且成交承载正常时", - "高位机构榜可能对应兑现或对倒,席位净买入不等于持续锁仓", - ), -} - -for strategy in CURATED_STRATEGIES: - suitable_environment, failure_risk = STRATEGY_ENVIRONMENT_NOTES[strategy["name"]] - strategy["formula"]["meta"].update( - { - "suitable_environment": suitable_environment, - "failure_risk": failure_risk, - } - ) - -BUILTIN_STRATEGIES.extend(CURATED_STRATEGIES) - - -def _quarter_periods(trade_date: str, count: int) -> list[str]: - current = datetime.strptime(trade_date, "%Y%m%d") - quarter_ends = ((3, 31), (6, 30), (9, 30), (12, 31)) - periods = [] - year = current.year - while len(periods) < count: - for month, day in reversed(quarter_ends): - value = datetime(year, month, day) - if value <= current: - periods.append(value.strftime("%Y%m%d")) - if len(periods) == count: - break - year -= 1 - return sorted(periods) - - -def _earnings_event_rows( - forecasts: list[dict[str, Any]], expresses: list[dict[str, Any]], trade_date: str, -) -> list[dict[str, Any]]: - forecast_map: dict[tuple[str, str], dict[str, Any]] = {} - for row in forecasts: - key = (str(row.get("ts_code") or ""), str(row.get("end_date") or "")) - ann_date = str(row.get("ann_date") or "") - if not all(key) or not ann_date or ann_date > trade_date: - continue - previous = forecast_map.get(key) - if previous is None or ann_date > str(previous.get("ann_date") or ""): - forecast_map[key] = row - result = [] - for row in expresses: - ts_code = str(row.get("ts_code") or "") - end_date = str(row.get("end_date") or "") - ann_date = str(row.get("ann_date") or "") - forecast = forecast_map.get((ts_code, end_date)) - if not forecast or not ts_code or not end_date or not ann_date or ann_date > trade_date: - continue - lower = _optional_number(forecast.get("net_profit_min")) - upper = _optional_number(forecast.get("net_profit_max")) - forecast_profit = statistics.fmean( - value for value in (lower, upper) if value is not None - ) if lower is not None or upper is not None else None - actual_profit = _optional_number(row.get("n_income")) - if forecast_profit in (None, 0) or actual_profit is None: - continue - # forecast is reported in ten-thousand yuan while express uses yuan. - if abs(actual_profit) > max(abs(forecast_profit), 1) * 100: - actual_profit /= 10000 - surprise_pct = (actual_profit / forecast_profit - 1) * 100 - result.append( - { - "end_date": end_date, - "ann_date": ann_date, - "ts_code": ts_code, - "forecast_profit": forecast_profit, - "actual_profit": actual_profit, - "surprise_pct": surprise_pct, - "revenue_yoy": _optional_number(row.get("yoy_sales")), - "netprofit_yoy": _optional_number(row.get("yoy_net_profit")), - "source": "forecast+express", - } - ) - return result - - -def _popularity_factor_rows( - trade_date: str, - ths_rows: list[dict[str, Any]], - dc_rows: list[dict[str, Any]], - previous_ths: list[dict[str, Any]], - previous_dc: list[dict[str, Any]], -) -> list[dict[str, Any]]: - def ranks(rows: list[dict[str, Any]], data_type: str) -> dict[str, int]: - result = {} - for row in rows: - if data_type and str(row.get("data_type") or "") != data_type: - continue - ts_code = str(row.get("ts_code") or "") - rank = int(_number(row.get("rank"))) - if ts_code and rank > 0: - result[ts_code] = rank - return result - - ths = ranks(ths_rows, "热股") - dc = ranks(dc_rows, "A股市场") - previous_ths_map = ranks(previous_ths, "热股") - previous_dc_map = ranks(previous_dc, "A股市场") - result = [] - for ts_code in set(ths) | set(dc): - ths_rank = ths.get(ts_code) - dc_rank = dc.get(ts_code) - current_best = min(value for value in (ths_rank, dc_rank) if value is not None) - previous_candidates = [ - value for value in (previous_ths_map.get(ts_code), previous_dc_map.get(ts_code)) - if value is not None - ] - previous_best = min(previous_candidates) if previous_candidates else None - score = (101 - (ths_rank or 101)) * 0.5 + (201 - (dc_rank or 201)) * 0.25 - result.append( - { - "trade_date": trade_date, - "ts_code": ts_code, - "ths_rank": ths_rank, - "dc_rank": dc_rank, - "combined_score": round(score, 2), - "rank_change": ( - previous_best - current_best - if previous_best is not None - else min(30, max(0, 31 - current_best)) - if previous_ths_map or previous_dc_map else 0 - ), - "dual_source": bool(ths_rank and dc_rank), - } - ) - return result - - -class FactorDataService: - def __init__(self, database: ReviewDatabase, client: TushareClient) -> None: - self.database = database - self.client = client - - def sync(self, requested_date: str, lookback: int = 45) -> dict[str, Any]: - lookback = max(25, min(260, int(lookback))) - trade_date, _ = self.client.resolve_trade_context(requested_date) - end = datetime.strptime(trade_date, "%Y%m%d") - start = (end - timedelta(days=max(100, lookback * 2 + 20))).strftime("%Y%m%d") - calendar = self.client.query( - "trade_cal", - {"exchange": "SSE", "start_date": start, "end_date": trade_date, "is_open": 1}, - "cal_date,is_open", - ) - dates = sorted(row["cal_date"] for row in calendar if row.get("is_open") == 1)[-lookback:] - existing = set(self.database.factor_dates(trade_date, lookback + 10)) - dates_to_fetch = [value for value in dates if value not in existing or value == trade_date] - auction_source_dates = dates[-min(80, len(dates)):] - existing_auction = set(self.database.auction_factor_dates(trade_date, 90)) - auction_dates_to_fetch = [ - value for value in auction_source_dates - if value not in existing_auction or value == trade_date - ] - long_calendar = self.client.query( - "trade_cal", - { - "exchange": "SSE", - "start_date": datetime(end.year - 5, 1, 1).strftime("%Y%m%d"), - "end_date": trade_date, - "is_open": 1, - }, - "cal_date,is_open", - ) - last_open_by_year: dict[str, str] = {} - last_open_by_month: dict[str, str] = {} - for row in long_calendar: - if row.get("is_open") == 1 and row.get("cal_date"): - value = str(row["cal_date"]) - last_open_by_year[value[:4]] = max(last_open_by_year.get(value[:4], ""), value) - last_open_by_month[value[:6]] = max(last_open_by_month.get(value[:6], ""), value) - valuation_dates = set(dates[-min(80, len(dates)):]) - valuation_dates.update(last_open_by_year.values()) - valuation_dates.update(last_open_by_month.values()) - existing_indicators = set(self.database.daily_indicator_dates(trade_date, 500)) - indicator_dates_to_fetch = sorted( - value for value in valuation_dates if value not in existing_indicators or value == trade_date - ) - - master = self.client.query( - "stock_basic", - {"list_status": "L"}, - "ts_code,name,industry,market,list_date", - ) - master_count = self.database.upsert_stock_master(master) - bar_count = 0 - for current_date in dates_to_fetch: - rows = self.client.query( - "daily", - {"trade_date": current_date}, - "ts_code,trade_date,open,high,low,close,pct_chg,vol,amount", - ) - bar_count += self.database.upsert_daily_bars(rows) - - indicator_count = 0 - for current_date in indicator_dates_to_fetch: - indicators = self.client.query( - "daily_basic", - {"trade_date": current_date}, - "ts_code,trade_date,turnover_rate,volume_ratio,total_mv,circ_mv," - "pe_ttm,pb,ps_ttm,dv_ttm", - ) - indicator_count += self.database.upsert_daily_indicators(indicators) - - notices = [] - benchmark_count = 0 - try: - benchmark_rows = self.client.query( - "index_daily", - {"ts_code": "000300.SH", "start_date": dates[0], "end_date": trade_date}, - "ts_code,trade_date,close,pct_chg", - ) - benchmark_count = self.database.upsert_benchmark_bars(benchmark_rows) - except TushareError as exc: - notices.append(f"沪深300基准暂不可用:{exc}") - fundamental_count = 0 - existing_periods = set(self.database.fundamental_periods()) - for period in _quarter_periods(trade_date, 9): - if period in existing_periods and period < trade_date[:4] + "0101": - continue - try: - rows = self.client.query( - "fina_indicator_vip", - {"period": period}, - "ts_code,ann_date,end_date,roe,roa,roic,grossprofit_margin," - "netprofit_yoy,or_yoy,ocf_to_opincome", - ) - except TushareError as exc: - notices.append(f"财务质量接口不可用:{exc}") - break - published = [ - row for row in rows - if not row.get("ann_date") or str(row.get("ann_date")) <= trade_date - ] - published.sort(key=lambda row: str(row.get("ann_date") or "")) - fundamental_count += self.database.upsert_fundamental_indicators(published) - auction_count = 0 - auction_dates = 0 - for current_date in auction_dates_to_fetch: - try: - auction_rows = self.client.query( - "stk_auction", - {"trade_date": current_date}, - "ts_code,trade_date,vol,price,amount,pre_close,turnover_rate,volume_ratio,float_share", - ) - if auction_rows: - auction_count += self.database.upsert_auction_factors(auction_rows) - auction_dates += 1 - except TushareError as exc: - notices.append(f"竞价因子接口不可用:{exc}") - break - moneyflow_count = 0 - moneyflow_dates = 0 - for current_date in dates[-min(5, len(dates)):]: - try: - moneyflow = self.client.query( - "moneyflow", - {"trade_date": current_date}, - "ts_code,trade_date,buy_sm_amount,sell_sm_amount,buy_md_amount,sell_md_amount," - "buy_lg_amount,sell_lg_amount,buy_elg_amount,sell_elg_amount,net_mf_amount", - ) - moneyflow_count += self.database.upsert_moneyflow(moneyflow) - if moneyflow: - moneyflow_dates += 1 - except TushareError as exc: - notices.append(f"资金流接口不可用:{exc}") - break - - earnings_count = 0 - forecasts: list[dict[str, Any]] = [] - expresses: list[dict[str, Any]] = [] - for period in _quarter_periods(trade_date, 5): - try: - forecast_rows = self.client.query( - "forecast_vip", - {"period": period}, - "ts_code,ann_date,end_date,net_profit_min,net_profit_max,last_parent_net,p_change_min,p_change_max", - ) - express_rows = self.client.query( - "express_vip", - {"period": period}, - "ts_code,ann_date,end_date,n_income,yoy_net_profit,yoy_sales", - ) - except TushareError as exc: - notices.append(f"业绩事件接口不可用:{exc}") - break - forecasts.extend(forecast_rows) - expresses.extend(express_rows) - if forecasts and expresses: - earnings_count = self.database.upsert_earnings_events( - _earnings_event_rows(forecasts, expresses, trade_date) - ) - - popularity_count = 0 - previous_trade_date = dates[-2] if len(dates) >= 2 else "" - try: - ths_rows = self.client.query("ths_hot", {"trade_date": trade_date}) - dc_rows = self.client.query("dc_hot", {"trade_date": trade_date}) - previous_ths = ( - self.client.query("ths_hot", {"trade_date": previous_trade_date}) - if previous_trade_date else [] - ) - previous_dc = ( - self.client.query("dc_hot", {"trade_date": previous_trade_date}) - if previous_trade_date else [] - ) - popularity_count = self.database.upsert_popularity_factors( - _popularity_factor_rows( - trade_date, ths_rows, dc_rows, previous_ths, previous_dc - ) - ) - except TushareError as exc: - notices.append(f"人气榜因子不可用:{exc}") - - institution_count = 0 - try: - institution_rows = self.client.query( - "top_inst", - {"trade_date": trade_date}, - "trade_date,ts_code,exalter,buy,sell,net_buy,side,reason", - ) - institution_count = self.database.upsert_lhb_institutions(institution_rows) - except TushareError as exc: - notices.append(f"机构席位明细不可用:{exc}") - - return { - "trade_date": trade_date, - "calendar_dates": len(dates), - "fetched_dates": len(dates_to_fetch), - "stocks": master_count, - "bars": bar_count, - "benchmark_bars": benchmark_count, - "indicators": indicator_count, - "indicator_dates": len(indicator_dates_to_fetch), - "fundamentals": fundamental_count, - "moneyflow": moneyflow_count, - "moneyflow_dates": moneyflow_dates, - "auction_rows": auction_count, - "auction_dates": auction_dates, - "earnings_events": earnings_count, - "popularity_rows": popularity_count, - "institution_rows": institution_count, - "notice": ";".join(notices), - } class ScreenerEngine: + """Stable facade over the independently owned screener services.""" + def __init__(self, database: ReviewDatabase) -> None: self.database = database - self._backtest_factor_cache: dict[tuple[str, int], list[dict[str, Any]]] = {} + self.factor_builder = FactorBuilder(database) + self.formula_evaluator = FormulaEvaluator() + self.regime_detector = RegimeDetector(database) + self.backtest_runner = BacktestRunner( + database, self.factor_builder, self.formula_evaluator + ) + self.selection_runner = SelectionRunner( + database, + self.factor_builder, + self.formula_evaluator, + self.backtest_runner, + ) def ensure_builtin_strategies(self) -> None: existing = { @@ -1071,81 +81,13 @@ class ScreenerEngine: ) def detect_regime(self, trade_date: str) -> dict[str, Any]: - series = latest_contiguous_history( - build_sentiment_history(self.database.list_snapshot_payloads(trade_date, 260)) - ) - if not series: - return { - "id": "repair", "label": REGIMES["repair"], "confidence": 25, - "reason": "复盘快照不足,暂按中性修复处理。", "evidence": [], "history": [], - } - current = series[-1] - previous = series[-2] if len(series) > 1 else current - score = _number(current.get("score")) - previous_score = _number(previous.get("score")) - delta = score - previous_score - seal_rate = _number(current.get("seal_rate")) - limit_up = _number(current.get("limit_up_count")) - broken = _number(current.get("broken_count")) - regime = next( - (key for key, label in REGIMES.items() if label == current.get("phase")), - "divergence", - ) - confidence = min(92, 45 + len(series[-8:]) * 5 + min(abs(delta), 12)) - evidence = [ - f"情绪温度 {score:.0f},较前一交易日 {delta:+.0f},{current.get('direction') or '持平'}", - f"封板率 {seal_rate:.1f}%", - f"涨停 {limit_up:.0f} 家,炸板 {broken:.0f} 家", - ] - return { - "id": regime, - "label": REGIMES[regime], - "confidence": round(confidence), - "reason": _regime_reason(regime), - "evidence": evidence, - "history": [ - {"trade_date": item["trade_date"], "score": _number(item.get("score"))} - for item in series[-8:] - ], - } + return self.regime_detector.detect_regime(trade_date) def factor_health(self, trade_date: str) -> dict[str, Any]: return self.database.factor_health_summary(trade_date) def validate_formula(self, formula: dict[str, Any]) -> dict[str, Any]: - if not isinstance(formula, dict): - raise ValueError("选股公式必须是 JSON 对象。") - result = copy.deepcopy(formula) - universe = result.setdefault("universe", {}) - universe["exclude_st"] = bool(universe.get("exclude_st", True)) - universe["listed_days_min"] = max(0, min(5000, int(universe.get("listed_days_min", 120)))) - filters = result.setdefault("filters", []) - if not isinstance(filters, list) or len(filters) > 20: - raise ValueError("筛选条件必须是列表,且不能超过 20 条。") - for condition in filters: - field = condition.get("field") - operator = condition.get("op") - if field not in FACTOR_FIELDS: - raise ValueError(f"不支持的选股因子:{field}") - if operator not in ALLOWED_OPERATORS: - raise ValueError(f"不支持的运算符:{operator}") - if "value" not in condition: - raise ValueError(f"因子 {field} 缺少比较值。") - scores = result.setdefault("score", []) - if not isinstance(scores, list) or not scores or len(scores) > 12: - raise ValueError("评分因子应为 1 至 12 条。") - for item in scores: - if item.get("field") not in FACTOR_FIELDS: - raise ValueError(f"不支持的评分因子:{item.get('field')}") - item["weight"] = float(item.get("weight", 0)) - if item["weight"] <= 0 or item["weight"] > 1: - raise ValueError("评分权重必须大于 0 且不超过 1。") - if item.get("direction", "desc") not in {"asc", "desc"}: - raise ValueError("评分方向只能是 asc 或 desc。") - item["direction"] = item.get("direction", "desc") - result["limit"] = max(1, min(50, int(result.get("limit", 15)))) - result["min_score"] = max(0, min(1, float(result.get("min_score", 0)))) - return result + return self.formula_evaluator.validate_formula(formula) def screen( self, user_id: int, trade_date: str, formula: dict[str, Any], regime: str, @@ -1155,89 +97,18 @@ class ScreenerEngine: prepared_factors: list[dict[str, Any]] | None = None, prepared_date: str = "", ) -> dict[str, Any]: - mode = mode if mode in {"smart", "curated", "quant"} else "smart" - formula = self.validate_formula(formula) - if prepared_factors is None: - history_days = int((formula.get("meta") or {}).get("history_days") or 80) - factors, actual_date = self.build_factors( - trade_date, realtime_snapshot, history_days - ) - else: - factors = prepared_factors - actual_date = prepared_date or trade_date - candidates = self.apply_formula(factors, formula, regime) - backtest = self.backtest(actual_date, formula) if run_backtest else None - required_fields = sorted({ - str(item.get("field") or "") - for item in list(formula.get("filters") or []) + list(formula.get("score") or []) - if item.get("field") - }) - complete_rows = sum( - 1 for row in factors - if all(row.get(field) is not None for field in required_fields) + return self.selection_runner.screen( + user_id, + trade_date, + formula, + regime, + strategy_name, + run_backtest, + realtime_snapshot, + mode, + prepared_factors, + prepared_date, ) - coverage = round(complete_rows / len(factors) * 100, 1) if factors else 0.0 - health_status = "normal" if candidates else "no_signal" - if backtest and backtest["samples"] >= 20: - for candidate in candidates: - estimate = backtest["win_rate"] * 0.65 + candidate["score"] * 100 * 0.35 - candidate["historical_probability"] = round(min(95, max(5, estimate)), 1) - candidate["probability_samples"] = backtest["samples"] - else: - for candidate in candidates: - candidate["historical_probability"] = None - candidate["probability_samples"] = backtest["samples"] if backtest else 0 - result = { - "meta": { - "trade_date": _display_date(actual_date), - "regime": regime, - "regime_label": REGIMES.get(regime, regime), - "strategy_name": strategy_name, - "mode": mode, - "library_version": int( - (formula.get("meta") or {}).get("library_version") or 0 - ), - "universe_count": len(factors), - "candidate_count": len(candidates), - "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), - "health": { - "status": health_status, - "required_field_count": len(required_fields), - "complete_rows": complete_rows, - "universe_rows": len(factors), - "coverage": coverage, - "signal_count": len(candidates), - }, - "selection_source": ( - "tushare_rt_k+history" if realtime_snapshot else "historical_eod" - ), - "realtime": bool(realtime_snapshot), - "history_cutoff": ( - str(realtime_snapshot.get("previous_trade_date") or "") - if realtime_snapshot else actual_date - ), - "factor_freshness": { - "realtime": [ - "价格", "涨跌幅", "成交量", "成交额", "换手率", - "均线位置", "5/10日动量", "板块强度", "开盘竞价", - ] if realtime_snapshot else [], - "historical": ["历史波动率", "流通市值", "资金流", "竞价因子", "回测"], - }, - }, - "formula": formula, - "candidates": candidates, - "backtest": backtest, - "disclaimer": ( - "候选仅由策略条件与当日数据计算;历史统计不代表未来收益。" - if mode == "curated" - else "概率为历史条件估计,不代表未来收益;退潮或样本不足时允许无候选。" - ), - } - run_id = self.database.save_screener_run( - user_id, actual_date, regime, strategy_name, formula, result, mode - ) - result["meta"]["run_id"] = run_id - return result def build_factors( self, @@ -1245,959 +116,14 @@ class ScreenerEngine: realtime_snapshot: dict[str, Any] | None = None, history_days: int = 80, ) -> tuple[list[dict[str, Any]], str]: - history_days = max(21, min(260, int(history_days))) - data = self.database.load_factor_data(trade_date, history_days) - dates = [value for value in data["dates"] if value <= trade_date] - if len(dates) < 21: - raise ValueError("历史行情不足 21 个交易日,请先同步因子数据。") - history_date = dates[-1] - realtime_map = { - str(row.get("ts_code") or ""): row - for row in (realtime_snapshot or {}).get("rows") or [] - } - realtime_date = str((realtime_snapshot or {}).get("trade_date") or "") - use_realtime = bool(realtime_map and realtime_date == trade_date and history_date < trade_date) - actual_date = trade_date if use_realtime else history_date - master = {row["ts_code"]: row for row in data["master"]} - indicators = {row["ts_code"]: row for row in data["indicators"]} - fundamentals = {row["ts_code"]: row for row in data.get("fundamentals", [])} - indicator_history: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in data.get("indicator_history", []): - indicator_history[str(row.get("ts_code") or "")].append(row) - indicator_series: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in data.get("indicator_series", []): - indicator_series[str(row.get("ts_code") or "")].append(row) - benchmark_by_date = { - str(row.get("trade_date") or ""): _number(row.get("close")) - for row in data.get("benchmarks", []) - if _number(row.get("close")) > 0 - } - moneyflow = {row["ts_code"]: row for row in data["moneyflow"]} - moneyflow_history: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in data.get("moneyflow_history", []): - moneyflow_history[str(row.get("ts_code") or "")].append(row) - auction = { - row["ts_code"]: row - for row in data.get("auction", []) - if str(row.get("trade_date") or "") == actual_date - } - earnings_events: dict[str, dict[str, Any]] = {} - for row in data.get("earnings_events", []): - ts_code = str(row.get("ts_code") or "") - ann_date = str(row.get("ann_date") or "") - if ann_date <= actual_date and ( - ts_code not in earnings_events - or ann_date > str(earnings_events[ts_code].get("ann_date") or "") - ): - earnings_events[ts_code] = row - popularity = { - str(row.get("ts_code") or ""): row - for row in data.get("popularity", []) - } - institutions = { - str(row.get("ts_code") or ""): row - for row in data.get("institutions", []) - } - grouped: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in data["bars"]: - if row["trade_date"] <= history_date: - grouped[row["ts_code"]].append(row) - - snapshot = self.database.get_snapshot(actual_date) or {} - limit_map: dict[str, tuple[str, int]] = {} - for key, status in (("limits", "涨停"), ("broken", "炸板"), ("down_limits", "跌停")): - for row in snapshot.get(key) or []: - limit_map[str(row.get("code"))] = (status, int(row.get("streak") or 0)) - - factors = [] - current_day = datetime.strptime(actual_date, "%Y%m%d") - for ts_code, bars in grouped.items(): - bars.sort(key=lambda item: item["trade_date"]) - if len(bars) < 21 or bars[-1]["trade_date"] != history_date: - continue - info = master.get(ts_code) - if not info: - continue - historical_closes = [_number(item["close"]) for item in bars] - historical_volumes = [_number(item["vol"]) for item in bars] - realtime = realtime_map.get(ts_code) if use_realtime else None - current = realtime or bars[-1] - closes = historical_closes + ([_number(realtime["close"])] if realtime else []) - volumes = historical_volumes + ([_number(realtime["vol"])] if realtime else []) - if closes[-1] <= 0: - continue - returns_10 = [_number(item["pct_chg"]) for item in bars[-10:]] - if realtime: - returns_10 = returns_10[-9:] + [_number(realtime.get("pct_chg"))] - previous_volume = statistics.fmean(volumes[-6:-1]) if any(volumes[-6:-1]) else 0 - indicator = indicators.get(ts_code, {}) - fundamental = fundamentals.get(ts_code, {}) - flow = moneyflow.get(ts_code, {}) - flow_history = moneyflow_history.get(ts_code, []) - auction_row = auction.get(ts_code, {}) - list_date = str(info.get("list_date") or "") - try: - listed_days = (current_day - datetime.strptime(list_date, "%Y%m%d")).days - except ValueError: - listed_days = 9999 - code = str(info.get("code") or ts_code.split(".")[0]) - status, streak = limit_map.get(code, ("", 0)) - name = str(info.get("name") or "--") - shape_rows = bars + ([realtime] if realtime else []) - shape_close = [_number(item.get("close")) for item in shape_rows] - shape_high = [_number(item.get("high") or item.get("close")) for item in shape_rows] - shape_low = [_number(item.get("low") or item.get("close")) for item in shape_rows] - shape_changes = [_number(item.get("pct_chg")) for item in shape_rows] - position_rows = shape_rows[-60:] - position_high = max((_number(item.get("high") or item.get("close")) for item in position_rows), default=0) - position_low = min((_number(item.get("low") or item.get("close")) for item in position_rows), default=0) - relative_position = ( - (closes[-1] - position_low) / (position_high - position_low) - if position_high > position_low else 0.5 - ) - previous_index = len(bars) - 1 if realtime else len(bars) - 2 - previous_bar = bars[previous_index] if previous_index >= 0 else {} - previous_limit = _is_limit_bar(bars, previous_index, code, name) - previous_touched = _touched_limit_bar(bars, previous_index, code, name) - recent_prior_signal = any( - _is_limit_bar(bars, index, code, name) - or _touched_limit_bar(bars, index, code, name) - for index in range(max(0, previous_index - 2), previous_index) - ) - previous_streak = 0 - streak_index = previous_index - while streak_index >= 0 and _is_limit_bar(bars, streak_index, code, name): - previous_streak += 1 - streak_index -= 1 - limit_flags = [ - _is_limit_bar(shape_rows, index, code, name) - for index in range(len(shape_rows)) - ] - annual_dividend_rows = indicator_history.get(ts_code, []) - dividend_years = sum( - 1 for item in annual_dividend_rows if _optional_number(item.get("dv_ttm")) not in (None, 0) - ) - current_streak = _ending_streak(limit_flags) - prior_streak = _ending_streak(limit_flags, len(limit_flags) - 2) - streak = max(streak, current_streak) - return_60d = ( - (closes[-1] / closes[-61] - 1) * 100 if len(closes) >= 61 and closes[-61] else 0 - ) - momentum_60_5 = ( - (closes[-6] / closes[-61] - 1) * 100 if len(closes) >= 61 and closes[-61] else 0 - ) - ma20 = statistics.fmean(closes[-20:]) - ma60 = statistics.fmean(closes[-60:]) if len(closes) >= 60 else ma20 - prior_ma20 = statistics.fmean(closes[-25:-5]) if len(closes) >= 25 else ma20 - prior_ma60 = statistics.fmean(closes[-65:-5]) if len(closes) >= 65 else ma60 - ma20_slope = (ma20 / prior_ma20 - 1) * 100 if prior_ma20 else 0 - ma60_slope = (ma60 / prior_ma60 - 1) * 100 if prior_ma60 else 0 - ma_values = [statistics.fmean(closes[-window:]) for window in (5, 10, 20, 60)] - high_250 = max(shape_high[-250:]) if len(shape_high) >= 250 else max(shape_high) - drawdown_250 = (1 - closes[-1] / high_250) * 100 if high_250 else 100 - prior_high_20 = max(shape_high[-21:-1]) if len(shape_high) >= 21 else 0 - breakout_pct = (closes[-1] / prior_high_20 - 1) * 100 if prior_high_20 else 0 - prior_lows_20 = shape_low[-21:-1] - range_20d = ( - (prior_high_20 / min(prior_lows_20) - 1) * 100 - if prior_lows_20 and min(prior_lows_20) > 0 else 100 - ) - turnover_rows = sorted( - indicator_series.get(ts_code, []), key=lambda item: str(item.get("trade_date") or "") - ) - turnover_values = [_number(item.get("turnover_rate")) for item in turnover_rows[-5:]] - if realtime and _number(realtime.get("turnover_rate")): - turnover_values = turnover_values[-4:] + [_number(realtime.get("turnover_rate"))] - turnover_5d = sum(turnover_values) - rs_values = [ - _number(item.get("close")) / benchmark_by_date[str(item.get("trade_date"))] - for item in shape_rows[-120:] - if benchmark_by_date.get(str(item.get("trade_date"))) and _number(item.get("close")) > 0 - ] - benchmark_60 = [ - benchmark_by_date.get(str(item.get("trade_date"))) - for item in shape_rows[-61:] - if benchmark_by_date.get(str(item.get("trade_date"))) - ] - benchmark_return_60 = ( - (benchmark_60[-1] / benchmark_60[0] - 1) * 100 - if len(benchmark_60) >= 61 and benchmark_60[0] else 0 - ) - weekly_closes, weekly_amounts = _weekly_series(shape_rows) - weekly_dif, weekly_dea = _macd_last(weekly_closes) - daily_dif, daily_dea = _macd_series(closes) - daily_cross = ( - len(daily_dif) >= 2 and daily_dif[-1] > daily_dea[-1] - and daily_dif[-2] <= daily_dea[-2] - ) - current_open = _number(current.get("open")) - daily_pullback = closes[-1] >= ma20 and current_open <= ma20 * 1.02 and closes[-1] > current_open - previous_close = closes[-2] if len(closes) >= 2 else closes[-1] - intraday_min = ( - (_number(current.get("low")) / previous_close - 1) * 100 if previous_close else 0 - ) - body = abs(closes[-1] - current_open) - lower_shadow = max(0.0, min(current_open, closes[-1]) - _number(current.get("low"))) - lower_shadow_ratio = lower_shadow / body if body > 0 else (10.0 if lower_shadow > 0 else 0.0) - previous_volume_value = volumes[-2] if len(volumes) >= 2 else 0 - vol_vs_previous = volumes[-1] / previous_volume_value if previous_volume_value else 0 - broken = _broken_reversal_metrics(shape_rows, limit_flags, code, name) - netprofit_yoy = _optional_number(fundamental.get("netprofit_yoy")) - earnings_event = earnings_events.get(ts_code, {}) - announcement_date = str(earnings_event.get("ann_date") or "") - earnings_days = ( - sum(1 for value in dates if announcement_date < value <= actual_date) - if announcement_date and announcement_date <= actual_date - else None - ) - announcement_bar = next( - (item for item in shape_rows if str(item.get("trade_date") or "") == announcement_date), - None, - ) - announcement_bad = False - if announcement_bar is not None: - bar_index = shape_rows.index(announcement_bar) - prior_volumes = [ - _number(item.get("vol")) for item in shape_rows[max(0, bar_index - 5):bar_index] - if _number(item.get("vol")) > 0 - ] - volume_baseline = statistics.fmean(prior_volumes) if prior_volumes else 0 - announcement_bad = ( - _number(announcement_bar.get("close")) < _number(announcement_bar.get("open")) - and _number(announcement_bar.get("pct_chg")) < 0 - and volume_baseline > 0 - and _number(announcement_bar.get("vol")) / volume_baseline >= 1.8 - ) - popularity_row = popularity.get(ts_code) - institution_row = institutions.get(ts_code) - factors.append( - { - "code": code, - "ts_code": ts_code, - "name": name, - "sector": info.get("industry") or "其他", - "market": info.get("market") or "--", - "listed_days": listed_days, - "close": round(closes[-1], 2), - "price": round(closes[-1], 2), - "pct_chg": round(_number(current["pct_chg"]), 2), - "return_5d": round((closes[-1] / closes[-6] - 1) * 100, 2), - "return_10d": round((closes[-1] / closes[-11] - 1) * 100, 2), - "return_20d": round((closes[-1] / closes[-21] - 1) * 100, 2), - "return_60d": round(return_60d, 2), - "momentum_60_5": round(momentum_60_5, 2), - "above_ma20": int(closes[-1] > ma20), - "rsi_6": round(_rsi(closes, 6), 2), - "ma60_slope": round(ma60_slope, 3), - "ma20_slope_5d": round(ma20_slope, 3), - "ma_bull_alignment": int(ma_values[0] > ma_values[1] > ma_values[2] > ma_values[3]), - "drawdown_from_high_250": round(drawdown_250, 2), - "donchian_breakout_pct": round(breakout_pct, 2), - "range_20d": round(range_20d, 2), - "rs_high_120": int(len(rs_values) >= 120 and rs_values[-1] >= max(rs_values)), - "excess_return_60d": round(return_60d - benchmark_return_60, 2), - "weekly_trend_signal": int(len(weekly_closes) >= 30 and weekly_dif > 0 and weekly_dea > 0), - "daily_buy_trigger": int(daily_cross or daily_pullback), - "weekly_amount_trend": int( - len(weekly_amounts) >= 5 - and weekly_amounts[-1] >= statistics.fmean(weekly_amounts[-5:-1]) - ), - "volume_ratio_5d": round(volumes[-1] / previous_volume, 2) if previous_volume else 0, - "turnover_5d": round(turnover_5d, 2), - "volatility_10d": round(statistics.pstdev(returns_10), 2), - "amount_billion": round( - _number(current["amount"]) / (100000000 if realtime else 100000), 2 - ), - "turnover_rate": round( - _number(realtime.get("turnover_rate")) - if realtime else _number(indicator.get("turnover_rate")), - 2, - ), - "circ_mv_billion": round(_number(indicator.get("circ_mv")) / 10000, 2), - "total_mv_billion": round(_number(indicator.get("total_mv")) / 10000, 2), - "pe_ttm": _rounded_optional(indicator.get("pe_ttm"), 2), - "pb": _rounded_optional(indicator.get("pb"), 2), - "ps_ttm": _rounded_optional(indicator.get("ps_ttm"), 2), - "dividend_yield_ttm": _rounded_optional(indicator.get("dv_ttm"), 2), - "dividend_years": dividend_years, - "roe": _rounded_optional(fundamental.get("roe"), 2), - "roa": _rounded_optional(fundamental.get("roa"), 2), - "roic": _rounded_optional(fundamental.get("roic"), 2), - "gross_margin": _rounded_optional(fundamental.get("grossprofit_margin"), 2), - "netprofit_yoy": _rounded_optional(fundamental.get("netprofit_yoy"), 2), - "revenue_yoy": _rounded_optional(fundamental.get("or_yoy"), 2), - "ocf_to_opincome": _rounded_optional(fundamental.get("ocf_to_opincome"), 2), - "earnings_surprise_pct": _rounded_optional(earnings_event.get("surprise_pct"), 2), - "earnings_days_since_announce": earnings_days, - "earnings_event_quality": int(not announcement_bad) if earnings_days is not None else None, - "popularity_score": _rounded_optional( - popularity_row.get("combined_score") if popularity_row else None, 2 - ), - "popularity_rank_change": ( - int(popularity_row["rank_change"]) - if popularity_row and popularity_row.get("rank_change") is not None else None - ), - "popularity_dual_source": ( - int(bool(popularity_row.get("dual_source"))) if popularity_row else None - ), - "institution_net_buy_million": ( - round(_number(institution_row.get("net_buy_amount")) / 1_000_000, 2) - if institution_row else None - ), - "institution_seat_count": ( - int(institution_row.get("seat_count") or 0) if institution_row else None - ), - "net_flow_million": round(_number(flow.get("net_mf_amount")) / 100, 2), - "large_flow_million": round(_number(flow.get("large_net_amount")) / 100, 2), - "net_flow_5d_million": round( - sum(_number(item.get("net_mf_amount")) for item in flow_history) / 100, - 2, - ), - "flow_to_circ_mv_5d": round( - sum(_number(item.get("net_mf_amount")) for item in flow_history) - / _number(indicator.get("circ_mv")) * 100, - 4, - ) if _number(indicator.get("circ_mv")) else 0, - "limit_status": status, - "limit_streak": streak, - "is_limit_up_today": int(limit_flags[-1]), - "is_limit_down_today": int(_number(current.get("pct_chg")) <= -_limit_threshold(code, name)), - "auction_change": round(_number(auction_row.get("change")), 2), - "auction_amount_million": round(_number(auction_row.get("amount")) / 1_000_000, 2), - "auction_turnover_rate": round(_number(auction_row.get("turnover_rate")), 4), - "auction_volume_ratio": round(_number(auction_row.get("volume_ratio")), 2), - "relative_position_60": round(relative_position, 4), - "max_abs_change_15d": round(max((abs(value) for value in shape_changes[-15:]), default=0), 2), - "close_to_high_15d": round(closes[-1] / max(shape_high[-15:]), 4) if shape_high[-15:] and max(shape_high[-15:]) else 0, - "close_to_high_60d": round(closes[-1] / max(shape_high[-60:]), 4) if shape_high[-60:] and max(shape_high[-60:]) else 0, - "no_limit_30d": int(not any(limit_flags[-30:])), - "had_limit_80d": int(any(limit_flags[-80:-30] if len(limit_flags) > 30 else [])), - "no_limit_down_20d": int(not any( - _number(item.get("pct_chg")) <= -_limit_threshold(code, name) - for item in shape_rows[-20:] - )), - "financial_risk": int( - "ST" in name.upper() or "退" in name - or (netprofit_yoy is not None and netprofit_yoy <= -100) - ), - "prior_limit_streak": prior_streak, - "max_continuous_board_10d": _max_streak(limit_flags[-10:]), - "dragon_first_yin": int( - prior_streak >= 3 and not limit_flags[-1] and closes[-1] < current_open - ), - "yin_day_pct": round(_number(current.get("pct_chg")), 2), - "vol_vs_previous": round(vol_vs_previous, 3), - "broken_reversal": broken["signal"], - "days_since_broken": broken["days"], - "close_above_broken_high": broken["recovered"], - "vol_vs_broken_day": broken["volume_ratio"], - "recent_limit_up_5d": sum(limit_flags[-5:]), - "intraday_min_pct": round(intraday_min, 2), - "lower_shadow_ratio": round(lower_shadow_ratio, 2), - "previous_first_limit": int(previous_limit and not recent_prior_signal), - "previous_limit_signal": int((previous_limit or previous_touched) and not recent_prior_signal), - "previous_limit_streak": previous_streak, - "previous_amount_billion": round(_number(previous_bar.get("amount")) / 100000, 2), - } - ) - - market_return = statistics.fmean(row["return_5d"] for row in factors) if factors else 0 - sectors: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in factors: - sectors[row["sector"]].append(row) - sector_metrics = [] - market_amount = sum(max(0.0, row["amount_billion"]) for row in factors) - for sector_name, sector_rows in sectors.items(): - average_return = statistics.fmean(row["return_5d"] for row in sector_rows) - average_return_20d = statistics.fmean(row["return_20d"] for row in sector_rows) - sector_net_flow = sum(row["net_flow_5d_million"] for row in sector_rows) - limit_count = sum(row["limit_status"] == "涨停" or row["pct_chg"] >= 9.5 for row in sector_rows) - up_count = sum(row["pct_chg"] >= 5 for row in sector_rows) - breadth_ma20 = sum(row["above_ma20"] for row in sector_rows) / max(len(sector_rows), 1) * 100 - sector_growth = [ - statistics.fmean(values) - for row in sector_rows - if (values := [ - value for value in (row.get("revenue_yoy"), row.get("netprofit_yoy")) - if value is not None - ]) - ] - prosperity_raw = statistics.median(sector_growth) if sector_growth else -100.0 - average_turnover = statistics.fmean(row["turnover_rate"] for row in sector_rows) - amount_share = ( - sum(max(0.0, row["amount_billion"]) for row in sector_rows) / market_amount * 100 - if market_amount else 0.0 - ) - crowding_raw = average_turnover + amount_share - trend_raw = average_return_20d + breadth_ma20 / 10 - strength = min(100, max(0, 50 + average_return * 4 + limit_count * 3 + up_count * 0.6)) - sector_metrics.append( - { - "ts_code": sector_name, - "sector_return_20d": average_return_20d, - "sector_net_flow_5d_million": sector_net_flow, - "sector_prosperity_raw": prosperity_raw, - "sector_trend_raw": trend_raw, - "sector_crowding_raw": crowding_raw, - } - ) - stock_momentum_ranks = _percentile_map(sector_rows, "return_20d", "desc") - for row in sector_rows: - row["sector_strength"] = round(strength, 1) - row["sector_return_5d"] = round(average_return, 2) - row["sector_return_20d"] = round(average_return_20d, 2) - row["sector_net_flow_5d_million"] = round(sector_net_flow, 2) - row["sector_stock_momentum_rank"] = round( - stock_momentum_ranks.get(row["ts_code"], 0.0), 4 - ) - row["sector_limit_count"] = limit_count - row["sector_up_count"] = up_count - row["sector_breadth_ma20"] = round(breadth_ma20, 1) - row["relative_strength"] = round(row["return_5d"] - market_return, 2) - sector_momentum_ranks = _percentile_map( - sector_metrics, "sector_return_20d", "desc" + return self.factor_builder.build_factors( + trade_date, realtime_snapshot, history_days ) - sector_flow_ranks = _percentile_map( - sector_metrics, "sector_net_flow_5d_million", "desc" - ) - sector_prosperity_ranks = _percentile_map( - sector_metrics, "sector_prosperity_raw", "desc" - ) - sector_trend_ranks = _percentile_map( - sector_metrics, "sector_trend_raw", "desc" - ) - sector_crowding_ranks = _percentile_map( - sector_metrics, "sector_crowding_raw", "desc" - ) - for sector_name, sector_rows in sectors.items(): - prosperity_rank = sector_prosperity_ranks.get(sector_name, 0.0) - trend_rank = sector_trend_ranks.get(sector_name, 0.0) - crowding_rank = sector_crowding_ranks.get(sector_name, 0.0) - composite_score = ( - prosperity_rank * 0.40 + trend_rank * 0.30 + (1 - crowding_rank) * 0.30 - ) - for row in sector_rows: - row["sector_momentum_rank"] = round( - sector_momentum_ranks.get(sector_name, 0.0), 4 - ) - row["sector_flow_rank"] = round( - sector_flow_ranks.get(sector_name, 0.0), 4 - ) - row["sector_prosperity_rank"] = round(prosperity_rank, 4) - row["sector_trend_rank"] = round(trend_rank, 4) - row["sector_crowding_rank"] = round(crowding_rank, 4) - row["sector_composite_score"] = round(composite_score, 4) - - factor_specs = { - "factor_value_score": (("pe_ttm", "asc"), ("pb", "asc"), ("dividend_yield_ttm", "desc")), - "factor_growth_score": (("revenue_yoy", "desc"), ("netprofit_yoy", "desc")), - "factor_quality_score": (("roe", "desc"), ("roic", "desc"), ("gross_margin", "desc")), - "factor_momentum_score": (("momentum_60_5", "desc"), ("relative_strength", "desc")), - "factor_sentiment_score": (("turnover_rate", "desc"), ("volume_ratio_5d", "desc")), - } - for output_field, specs in factor_specs.items(): - maps = [_available_percentile_map(factors, field, direction) for field, direction in specs] - for row in factors: - values = [mapping.get(row["ts_code"]) for mapping in maps] - available = [value for value in values if value is not None] - row[output_field] = round(statistics.fmean(available), 4) if available else None - - return_rank_map = _available_percentile_map(factors, "return_20d", "desc") - factor_weights = {} - for output_field in factor_specs: - pairs = [ - (row.get(output_field), return_rank_map.get(row["ts_code"])) - for row in factors - if row.get(output_field) is not None and return_rank_map.get(row["ts_code"]) is not None - ] - correlation = _pearson([pair[0] for pair in pairs], [pair[1] for pair in pairs]) - factor_weights[output_field] = max(0.05, correlation) - factor_weight_total = sum(factor_weights.values()) or 1 - for row in factors: - weighted = [ - (row.get(field), weight) - for field, weight in factor_weights.items() - if row.get(field) is not None - ] - row["multi_factor_composite"] = round( - sum(value * weight for value, weight in weighted) - / (sum(weight for _, weight in weighted) or factor_weight_total), - 4, - ) if weighted else None - - size_ranks = _available_percentile_map(factors, "total_mv_billion", "desc") - large_rows = [row for row in factors if (size_ranks.get(row["ts_code"]) or 0) >= 0.70] - small_rows = [ - row for row in factors - if size_ranks.get(row["ts_code"]) is not None - and size_ranks[row["ts_code"]] <= 0.30 - ] - large_return = statistics.fmean(row["return_20d"] for row in large_rows) if large_rows else 0 - small_return = statistics.fmean(row["return_20d"] for row in small_rows) if small_rows else 0 - prefer_large = large_return >= small_return - growth_rows = [row for row in factors if (row.get("factor_growth_score") or 0) >= 0.70] - value_rows = [row for row in factors if (row.get("factor_value_score") or 0) >= 0.70] - growth_return = statistics.fmean(row["return_20d"] for row in growth_rows) if growth_rows else 0 - value_return = statistics.fmean(row["return_20d"] for row in value_rows) if value_rows else 0 - prefer_growth = growth_return >= value_return - for row in factors: - size_rank = size_ranks.get(row["ts_code"]) - row["style_size_fit"] = round( - size_rank if prefer_large else 1 - size_rank, 4 - ) if size_rank is not None else None - style_factor = "factor_growth_score" if prefer_growth else "factor_value_score" - row["style_growth_fit"] = row.get(style_factor) - style_values = [ - value for value in (row.get("style_size_fit"), row.get("style_growth_fit")) - if value is not None - ] - row["style_fit_score"] = round(statistics.fmean(style_values), 4) if style_values else None - momentum_ranks = _percentile_map(factors, "momentum_60_5", "desc") - return_ranks = _percentile_map(factors, "return_5d", "desc") - market_height = max((int(row.get("limit_streak") or 0) for row in factors), default=0) - prior_market_height = max((int(row.get("prior_limit_streak") or 0) for row in factors), default=0) - for row in factors: - row["momentum_60_5_rank"] = round(momentum_ranks.get(row["ts_code"], 0.0), 4) - row["return_5d_rank"] = round(return_ranks.get(row["ts_code"], 0.0), 4) - is_height = market_height >= 2 and int(row.get("limit_streak") or 0) == market_height - row["is_market_height"] = int(is_height) - row["new_space_board"] = int( - is_height - and not ( - prior_market_height >= 2 - and int(row.get("prior_limit_streak") or 0) == prior_market_height - ) - ) - return factors, actual_date def apply_formula( self, rows: list[dict[str, Any]], formula: dict[str, Any], regime: str ) -> list[dict[str, Any]]: - universe = formula["universe"] - eligible = [] - score_fields = [item["field"] for item in formula["score"]] - for row in rows: - name = str(row.get("name") or "") - if universe.get("exclude_st") and ("ST" in name.upper() or "退" in name): - continue - if row.get("listed_days", 0) < universe.get("listed_days_min", 0): - continue - if any(row.get(field) is None for field in score_fields): - continue - if all(_matches(row.get(item["field"]), item["op"], item["value"]) for item in formula["filters"]): - eligible.append(row) - if not eligible: - return [] - - percentiles = { - item["field"]: _percentile_map(eligible, item["field"], item["direction"]) - for item in formula["score"] - } - weight_total = sum(item["weight"] for item in formula["score"]) - results = [] - for row in eligible: - contributions = [] - score = 0.0 - for item in formula["score"]: - percentile = percentiles[item["field"]].get(row["ts_code"], 0.5) - points = percentile * item["weight"] / weight_total - score += points - contributions.append( - { - "field": item["field"], - "label": FACTOR_FIELDS[item["field"]], - "value": row.get(item["field"], 0), - "points": round(points * 100, 1), - } - ) - if score < formula["min_score"]: - continue - contributions.sort(key=lambda item: item["points"], reverse=True) - item = dict(row) - item["score"] = round(score, 4) - item["score_display"] = round(score * 100, 1) - item["contributions"] = contributions - item["reason"] = "、".join(entry["label"] for entry in contributions[:3]) - include_regime_risk = formula.get("meta", {}).get("library") != "curated" - item["risk_flags"] = _risk_flags(row, regime, include_regime_risk) - results.append(item) - results.sort(key=lambda item: item["score"], reverse=True) - return results[: formula["limit"]] + return self.formula_evaluator.apply_formula(rows, formula, regime) def backtest(self, trade_date: str, formula: dict[str, Any]) -> dict[str, Any]: - meta = formula.get("meta") or {} - history_days = max(21, min(260, int(meta.get("history_days") or 80))) - holding_days = max(1, min(30, int(meta.get("backtest_days") or 3))) - take_profit = max(0.5, min(50.0, float(meta.get("take_profit") or 3))) - stop_loss = min(-0.5, max(-50.0, float(meta.get("stop_loss") or -3))) - dates = self.database.factor_dates(trade_date, history_days + holding_days + 20) - eligible_dates = dates[:-holding_days] if len(dates) > holding_days else [] - frequency = str(meta.get("frequency") or "每日") - if "月" in frequency: - grouped = {} - for value in eligible_dates: - grouped[value[:6]] = value - evaluation_dates = list(grouped.values())[-8:] - elif "双周" in frequency: - weekly_dates = [] - grouped = {} - for value in eligible_dates: - parsed = datetime.strptime(value, "%Y%m%d") - grouped[parsed.strftime("%G-%V")] = value - weekly_dates = list(grouped.values()) - evaluation_dates = weekly_dates[-16::2][-8:] - elif "周" in frequency: - grouped = {} - for value in eligible_dates: - parsed = datetime.strptime(value, "%Y%m%d") - grouped[parsed.strftime("%G-%V")] = value - evaluation_dates = list(grouped.values())[-8:] - else: - evaluation_dates = eligible_dates[-8:] - wins = 0 - losses = 0 - samples = 0 - returns = [] - drawdowns = [] - all_data = self.database.load_factor_data( - trade_date, history_days + holding_days + 20 - ) - bars_by_code: dict[str, list[dict[str, Any]]] = defaultdict(list) - for row in all_data["bars"]: - bars_by_code[row["ts_code"]].append(row) - for bars in bars_by_code.values(): - bars.sort(key=lambda item: item["trade_date"]) - - for current_date in evaluation_dates: - try: - cache_key = (current_date, history_days) - factors = self._backtest_factor_cache.get(cache_key) - if factors is None: - factors, _ = self.build_factors( - current_date, history_days=history_days - ) - if len(self._backtest_factor_cache) >= 64: - self._backtest_factor_cache.pop( - next(iter(self._backtest_factor_cache)) - ) - self._backtest_factor_cache[cache_key] = factors - except ValueError: - continue - selected = self.apply_formula(factors, {**formula, "limit": min(10, formula["limit"])}, "backtest") - for candidate in selected: - bars = bars_by_code.get(candidate["ts_code"], []) - index = next((i for i, row in enumerate(bars) if row["trade_date"] == current_date), -1) - future = bars[index + 1:index + 1 + holding_days] if index >= 0 else [] - if len(future) < holding_days: - continue - entry = candidate["price"] - won = False - lost = False - for day in future: - low_return = (_number(day["low"]) / entry - 1) * 100 - high_return = (_number(day["high"]) / entry - 1) * 100 - if low_return <= stop_loss: - lost = True - break - if high_return >= take_profit: - won = True - break - if won: - wins += 1 - elif lost: - losses += 1 - samples += 1 - returns.append((_number(future[-1]["close"]) / entry - 1) * 100) - drawdowns.append(min((_number(day["low"]) / entry - 1) * 100 for day in future)) - return { - "samples": samples, - "wins": wins, - "losses": losses, - "win_rate": round(wins / samples * 100, 1) if samples else 0, - "average_3d_return": round(statistics.fmean(returns), 2) if returns else 0, - "average_holding_return": round(statistics.fmean(returns), 2) if returns else 0, - "average_drawdown": round(statistics.fmean(drawdowns), 2) if drawdowns else 0, - "evaluation_days": len(evaluation_dates), - "frequency": frequency, - "holding_days": holding_days, - "take_profit": take_profit, - "stop_loss": stop_loss, - "definition": ( - f"收盘后选股,未来{holding_days}日先触及+{take_profit:g}%且未先触及" - f"{stop_loss:g}%计为成功;同日双触发按失败处理。" - ), - "approximate": True, - } - - -def compile_local_strategy(prompt: str, regime: str) -> dict[str, Any]: - base = next((item for item in BUILTIN_STRATEGIES if regime in item["regimes"]), BUILTIN_STRATEGIES[1]) - formula = copy.deepcopy(base["formula"]) - description = prompt.strip() or base["description"] - lowered = description.lower() - if "低吸" in description: - formula["filters"] = [item for item in formula["filters"] if item["field"] != "pct_chg"] - formula["filters"].append({"field": "pct_chg", "op": "between", "value": [-3, 3]}) - if "放量" in description: - formula["filters"].append({"field": "volume_ratio_5d", "op": ">=", "value": 1.2}) - if "强势" in description or "突破" in description: - formula["filters"].append({"field": "return_5d", "op": ">=", "value": 5}) - if "低波" in description or "稳健" in description: - formula["score"].append({"field": "volatility_10d", "weight": 0.18, "direction": "asc"}) - if "资金" in description or "主力" in description: - formula["score"].append({"field": "net_flow_million", "weight": 0.18, "direction": "desc"}) - if "小市值" in description or "小盘" in description: - formula["score"].append({"field": "circ_mv_billion", "weight": 0.15, "direction": "asc"}) - if "竞价" in description: - formula["filters"].extend( - [ - {"field": "auction_change", "op": "between", "value": [0.5, 8]}, - {"field": "auction_amount_million", "op": ">=", "value": 2}, - ] - ) - formula["score"].extend( - [ - {"field": "auction_volume_ratio", "weight": 0.20, "direction": "desc"}, - {"field": "auction_amount_million", "weight": 0.18, "direction": "desc"}, - ] - ) - if "少量" in description or "精选" in description: - formula["limit"] = min(formula["limit"], 8) - formula["score"] = formula["score"][:12] - return { - "name": f"{REGIMES.get(regime, regime)}自定义策略", - "description": description, - "regimes": [regime], - "formula": formula, - "compiler": "local_template", - } - - -def _optional_number(value: Any) -> float | None: - if value in (None, ""): - return None - try: - result = float(value) - except (TypeError, ValueError): - return None - return result if math.isfinite(result) else None - - -def _rounded_optional(value: Any, digits: int = 2) -> float | None: - parsed = _optional_number(value) - return round(parsed, digits) if parsed is not None else None - - -def _limit_threshold(code: str, name: str) -> float: - if code.startswith(("4", "8")): - return 29.0 - if code.startswith(("30", "68")): - return 19.0 - return 9.5 - - -def _ending_streak(flags: list[bool], end_index: int | None = None) -> int: - if not flags: - return 0 - index = len(flags) - 1 if end_index is None else min(end_index, len(flags) - 1) - streak = 0 - while index >= 0 and flags[index]: - streak += 1 - index -= 1 - return streak - - -def _max_streak(flags: list[bool]) -> int: - best = current = 0 - for value in flags: - current = current + 1 if value else 0 - best = max(best, current) - return best - - -def _rsi(values: list[float], period: int = 6) -> float: - if len(values) <= period: - return 50.0 - changes = [values[index] - values[index - 1] for index in range(len(values) - period, len(values))] - gains = sum(max(change, 0.0) for change in changes) / period - losses = sum(max(-change, 0.0) for change in changes) / period - if losses == 0: - return 100.0 if gains > 0 else 50.0 - return 100 - 100 / (1 + gains / losses) - - -def _ema(values: list[float], period: int) -> list[float]: - if not values: - return [] - alpha = 2 / (period + 1) - result = [values[0]] - for value in values[1:]: - result.append(value * alpha + result[-1] * (1 - alpha)) - return result - - -def _macd_series(values: list[float]) -> tuple[list[float], list[float]]: - fast = _ema(values, 12) - slow = _ema(values, 26) - dif = [left - right for left, right in zip(fast, slow)] - return dif, _ema(dif, 9) - - -def _macd_last(values: list[float]) -> tuple[float, float]: - dif, dea = _macd_series(values) - return (dif[-1], dea[-1]) if dif and dea else (0.0, 0.0) - - -def _weekly_series(rows: list[dict[str, Any]]) -> tuple[list[float], list[float]]: - weeks: dict[str, tuple[float, float]] = {} - for row in rows: - trade_date = str(row.get("trade_date") or "") - try: - key = datetime.strptime(trade_date, "%Y%m%d").strftime("%G-%V") - except ValueError: - continue - close = _number(row.get("close")) - amount = _number(row.get("amount")) - previous = weeks.get(key, (close, 0.0)) - weeks[key] = (close, previous[1] + amount) - ordered = list(weeks.values()) - return [item[0] for item in ordered], [item[1] for item in ordered] - - -def _broken_reversal_metrics( - rows: list[dict[str, Any]], flags: list[bool], code: str, name: str, -) -> dict[str, Any]: - result = {"signal": 0, "days": 0, "recovered": 0, "volume_ratio": 0.0} - if not rows or not flags[-1]: - return result - current_close = _number(rows[-1].get("close")) - current_volume = _number(rows[-1].get("vol")) - for days in range(1, 4): - index = len(rows) - 1 - days - if index <= 0 or flags[index] or _ending_streak(flags, index - 1) < 2: - continue - broken_high = _number(rows[index].get("high")) - broken_volume = _number(rows[index].get("vol")) - recovered = int(current_close >= broken_high > 0) - volume_ratio = current_volume / broken_volume if broken_volume else 0.0 - return { - "signal": int(recovered and volume_ratio >= 1), - "days": days, - "recovered": recovered, - "volume_ratio": round(volume_ratio, 3), - } - return result - - -def _is_limit_bar(rows: list[dict[str, Any]], index: int, code: str, name: str) -> bool: - if index < 0 or index >= len(rows): - return False - return _number(rows[index].get("pct_chg")) >= _limit_threshold(code, name) - - -def _touched_limit_bar(rows: list[dict[str, Any]], index: int, code: str, name: str) -> bool: - if index <= 0 or index >= len(rows): - return False - previous_close = _number(rows[index - 1].get("close")) - high = _number(rows[index].get("high")) - if previous_close <= 0 or high <= 0: - return False - touched_change = (high / previous_close - 1) * 100 - return touched_change >= _limit_threshold(code, name) - - -def _matches(actual: Any, operator: str, expected: Any) -> bool: - if actual is None: - return False - try: - if operator == "between": - return float(expected[0]) <= float(actual) <= float(expected[1]) - if operator == "in": - return actual in expected - if operator == ">": - return float(actual) > float(expected) - if operator == ">=": - return float(actual) >= float(expected) - if operator == "<": - return float(actual) < float(expected) - if operator == "<=": - return float(actual) <= float(expected) - if operator == "==": - return actual == expected or float(actual) == float(expected) - if operator == "!=": - return actual != expected - except (TypeError, ValueError, IndexError): - return False - return False - - -def _percentile_map(rows: list[dict[str, Any]], field: str, direction: str) -> dict[str, float]: - ordered = sorted(rows, key=lambda item: _number(item.get(field))) - denominator = max(1, len(ordered) - 1) - result = {} - for index, row in enumerate(ordered): - percentile = index / denominator - result[row["ts_code"]] = 1 - percentile if direction == "asc" else percentile - return result - - -def _available_percentile_map( - rows: list[dict[str, Any]], field: str, direction: str, -) -> dict[str, float | None]: - available = [row for row in rows if row.get(field) is not None] - result: dict[str, float | None] = { - str(row.get("ts_code") or ""): None for row in rows - } - if not available: - return result - ordered = sorted(available, key=lambda item: _number(item.get(field))) - denominator = max(1, len(ordered) - 1) - for index, row in enumerate(ordered): - percentile = 0.5 if len(ordered) == 1 else index / denominator - result[str(row.get("ts_code") or "")] = ( - 1 - percentile if direction == "asc" else percentile - ) - return result - - -def _pearson(first: list[float], second: list[float]) -> float: - if len(first) != len(second) or len(first) < 20: - return 0.0 - first_mean = statistics.fmean(first) - second_mean = statistics.fmean(second) - numerator = sum( - (left - first_mean) * (right - second_mean) - for left, right in zip(first, second) - ) - left_sum = sum((value - first_mean) ** 2 for value in first) - right_sum = sum((value - second_mean) ** 2 for value in second) - denominator = math.sqrt(left_sum * right_sum) - return numerator / denominator if denominator else 0.0 - - -def _risk_flags( - row: dict[str, Any], regime: str, include_regime_risk: bool = True -) -> list[str]: - flags = [] - if row.get("pct_chg", 0) >= 9.5: - flags.append("当日接近涨停,次日存在高开与无法成交风险") - if row.get("return_10d", 0) >= 25: - flags.append("短期累计涨幅较高") - if row.get("volatility_10d", 0) >= 7: - flags.append("波动率偏高") - if row.get("amount_billion", 0) < 1: - flags.append("成交承载力偏弱") - if include_regime_risk and regime == "retreat": - flags.append("市场处于退潮阶段,策略可能选择空仓") - return flags - - -def _regime_reason(regime: str) -> str: - return { - "ice": "情绪和赚钱效应处于低位,重点观察率先抗跌与转折信号。", - "repair": "核心指标从低位改善,适合观察率先修复且有板块共振的方向。", - "fermentation": "赚钱效应扩散,主线和梯队持续增强。", - "climax": "情绪处于高位,后排跟风与兑现风险同时上升。", - "divergence": "指数或核心仍强,但广度、封板质量开始分化。", - "retreat": "情绪指标继续走弱,应提高筛选门槛并接受无候选结果。", - }.get(regime, "市场阶段待确认。") + return self.backtest_runner.backtest(trade_date, formula) diff --git a/backend/features/screener/factors.py b/backend/features/screener/factors.py new file mode 100644 index 0000000..5fd064d --- /dev/null +++ b/backend/features/screener/factors.py @@ -0,0 +1,562 @@ +from __future__ import annotations + +import statistics +from collections import defaultdict +from datetime import datetime +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.features.screener.indicators import ( + _available_percentile_map, + _broken_reversal_metrics, + _ending_streak, + _is_limit_bar, + _limit_threshold, + _macd_last, + _macd_series, + _max_streak, + _optional_number, + _pearson, + _percentile_map, + _rounded_optional, + _rsi, + _touched_limit_bar, + _weekly_series, +) +from database import ReviewDatabase + + +class FactorBuilder: + def __init__(self, database: ReviewDatabase) -> None: + self.database = database + + def build_factors( + self, + trade_date: str, + realtime_snapshot: dict[str, Any] | None = None, + history_days: int = 80, + ) -> tuple[list[dict[str, Any]], str]: + history_days = max(21, min(260, int(history_days))) + data = self.database.load_factor_data(trade_date, history_days) + dates = [value for value in data["dates"] if value <= trade_date] + if len(dates) < 21: + raise ValueError("历史行情不足 21 个交易日,请先同步因子数据。") + history_date = dates[-1] + realtime_map = { + str(row.get("ts_code") or ""): row + for row in (realtime_snapshot or {}).get("rows") or [] + } + realtime_date = str((realtime_snapshot or {}).get("trade_date") or "") + use_realtime = bool(realtime_map and realtime_date == trade_date and history_date < trade_date) + actual_date = trade_date if use_realtime else history_date + master = {row["ts_code"]: row for row in data["master"]} + indicators = {row["ts_code"]: row for row in data["indicators"]} + fundamentals = {row["ts_code"]: row for row in data.get("fundamentals", [])} + indicator_history: dict[str, list[dict[str, Any]]] = defaultdict(list) + for row in data.get("indicator_history", []): + indicator_history[str(row.get("ts_code") or "")].append(row) + indicator_series: dict[str, list[dict[str, Any]]] = defaultdict(list) + for row in data.get("indicator_series", []): + indicator_series[str(row.get("ts_code") or "")].append(row) + benchmark_by_date = { + str(row.get("trade_date") or ""): _number(row.get("close")) + for row in data.get("benchmarks", []) + if _number(row.get("close")) > 0 + } + moneyflow = {row["ts_code"]: row for row in data["moneyflow"]} + moneyflow_history: dict[str, list[dict[str, Any]]] = defaultdict(list) + for row in data.get("moneyflow_history", []): + moneyflow_history[str(row.get("ts_code") or "")].append(row) + auction = { + row["ts_code"]: row + for row in data.get("auction", []) + if str(row.get("trade_date") or "") == actual_date + } + earnings_events: dict[str, dict[str, Any]] = {} + for row in data.get("earnings_events", []): + ts_code = str(row.get("ts_code") or "") + ann_date = str(row.get("ann_date") or "") + if ann_date <= actual_date and ( + ts_code not in earnings_events + or ann_date > str(earnings_events[ts_code].get("ann_date") or "") + ): + earnings_events[ts_code] = row + popularity = { + str(row.get("ts_code") or ""): row + for row in data.get("popularity", []) + } + institutions = { + str(row.get("ts_code") or ""): row + for row in data.get("institutions", []) + } + grouped: dict[str, list[dict[str, Any]]] = defaultdict(list) + for row in data["bars"]: + if row["trade_date"] <= history_date: + grouped[row["ts_code"]].append(row) + + snapshot = self.database.get_snapshot(actual_date) or {} + limit_map: dict[str, tuple[str, int]] = {} + for key, status in (("limits", "涨停"), ("broken", "炸板"), ("down_limits", "跌停")): + for row in snapshot.get(key) or []: + limit_map[str(row.get("code"))] = (status, int(row.get("streak") or 0)) + + factors = [] + current_day = datetime.strptime(actual_date, "%Y%m%d") + for ts_code, bars in grouped.items(): + bars.sort(key=lambda item: item["trade_date"]) + if len(bars) < 21 or bars[-1]["trade_date"] != history_date: + continue + info = master.get(ts_code) + if not info: + continue + historical_closes = [_number(item["close"]) for item in bars] + historical_volumes = [_number(item["vol"]) for item in bars] + realtime = realtime_map.get(ts_code) if use_realtime else None + current = realtime or bars[-1] + closes = historical_closes + ([_number(realtime["close"])] if realtime else []) + volumes = historical_volumes + ([_number(realtime["vol"])] if realtime else []) + if closes[-1] <= 0: + continue + returns_10 = [_number(item["pct_chg"]) for item in bars[-10:]] + if realtime: + returns_10 = returns_10[-9:] + [_number(realtime.get("pct_chg"))] + previous_volume = statistics.fmean(volumes[-6:-1]) if any(volumes[-6:-1]) else 0 + indicator = indicators.get(ts_code, {}) + fundamental = fundamentals.get(ts_code, {}) + flow = moneyflow.get(ts_code, {}) + flow_history = moneyflow_history.get(ts_code, []) + auction_row = auction.get(ts_code, {}) + list_date = str(info.get("list_date") or "") + try: + listed_days = (current_day - datetime.strptime(list_date, "%Y%m%d")).days + except ValueError: + listed_days = 9999 + code = str(info.get("code") or ts_code.split(".")[0]) + status, streak = limit_map.get(code, ("", 0)) + name = str(info.get("name") or "--") + shape_rows = bars + ([realtime] if realtime else []) + shape_close = [_number(item.get("close")) for item in shape_rows] + shape_high = [_number(item.get("high") or item.get("close")) for item in shape_rows] + shape_low = [_number(item.get("low") or item.get("close")) for item in shape_rows] + shape_changes = [_number(item.get("pct_chg")) for item in shape_rows] + position_rows = shape_rows[-60:] + position_high = max((_number(item.get("high") or item.get("close")) for item in position_rows), default=0) + position_low = min((_number(item.get("low") or item.get("close")) for item in position_rows), default=0) + relative_position = ( + (closes[-1] - position_low) / (position_high - position_low) + if position_high > position_low else 0.5 + ) + previous_index = len(bars) - 1 if realtime else len(bars) - 2 + previous_bar = bars[previous_index] if previous_index >= 0 else {} + previous_limit = _is_limit_bar(bars, previous_index, code, name) + previous_touched = _touched_limit_bar(bars, previous_index, code, name) + recent_prior_signal = any( + _is_limit_bar(bars, index, code, name) + or _touched_limit_bar(bars, index, code, name) + for index in range(max(0, previous_index - 2), previous_index) + ) + previous_streak = 0 + streak_index = previous_index + while streak_index >= 0 and _is_limit_bar(bars, streak_index, code, name): + previous_streak += 1 + streak_index -= 1 + limit_flags = [ + _is_limit_bar(shape_rows, index, code, name) + for index in range(len(shape_rows)) + ] + annual_dividend_rows = indicator_history.get(ts_code, []) + dividend_years = sum( + 1 for item in annual_dividend_rows if _optional_number(item.get("dv_ttm")) not in (None, 0) + ) + current_streak = _ending_streak(limit_flags) + prior_streak = _ending_streak(limit_flags, len(limit_flags) - 2) + streak = max(streak, current_streak) + return_60d = ( + (closes[-1] / closes[-61] - 1) * 100 if len(closes) >= 61 and closes[-61] else 0 + ) + momentum_60_5 = ( + (closes[-6] / closes[-61] - 1) * 100 if len(closes) >= 61 and closes[-61] else 0 + ) + ma20 = statistics.fmean(closes[-20:]) + ma60 = statistics.fmean(closes[-60:]) if len(closes) >= 60 else ma20 + prior_ma20 = statistics.fmean(closes[-25:-5]) if len(closes) >= 25 else ma20 + prior_ma60 = statistics.fmean(closes[-65:-5]) if len(closes) >= 65 else ma60 + ma20_slope = (ma20 / prior_ma20 - 1) * 100 if prior_ma20 else 0 + ma60_slope = (ma60 / prior_ma60 - 1) * 100 if prior_ma60 else 0 + ma_values = [statistics.fmean(closes[-window:]) for window in (5, 10, 20, 60)] + high_250 = max(shape_high[-250:]) if len(shape_high) >= 250 else max(shape_high) + drawdown_250 = (1 - closes[-1] / high_250) * 100 if high_250 else 100 + prior_high_20 = max(shape_high[-21:-1]) if len(shape_high) >= 21 else 0 + breakout_pct = (closes[-1] / prior_high_20 - 1) * 100 if prior_high_20 else 0 + prior_lows_20 = shape_low[-21:-1] + range_20d = ( + (prior_high_20 / min(prior_lows_20) - 1) * 100 + if prior_lows_20 and min(prior_lows_20) > 0 else 100 + ) + turnover_rows = sorted( + indicator_series.get(ts_code, []), key=lambda item: str(item.get("trade_date") or "") + ) + turnover_values = [_number(item.get("turnover_rate")) for item in turnover_rows[-5:]] + if realtime and _number(realtime.get("turnover_rate")): + turnover_values = turnover_values[-4:] + [_number(realtime.get("turnover_rate"))] + turnover_5d = sum(turnover_values) + rs_values = [ + _number(item.get("close")) / benchmark_by_date[str(item.get("trade_date"))] + for item in shape_rows[-120:] + if benchmark_by_date.get(str(item.get("trade_date"))) and _number(item.get("close")) > 0 + ] + benchmark_60 = [ + benchmark_by_date.get(str(item.get("trade_date"))) + for item in shape_rows[-61:] + if benchmark_by_date.get(str(item.get("trade_date"))) + ] + benchmark_return_60 = ( + (benchmark_60[-1] / benchmark_60[0] - 1) * 100 + if len(benchmark_60) >= 61 and benchmark_60[0] else 0 + ) + weekly_closes, weekly_amounts = _weekly_series(shape_rows) + weekly_dif, weekly_dea = _macd_last(weekly_closes) + daily_dif, daily_dea = _macd_series(closes) + daily_cross = ( + len(daily_dif) >= 2 and daily_dif[-1] > daily_dea[-1] + and daily_dif[-2] <= daily_dea[-2] + ) + current_open = _number(current.get("open")) + daily_pullback = closes[-1] >= ma20 and current_open <= ma20 * 1.02 and closes[-1] > current_open + previous_close = closes[-2] if len(closes) >= 2 else closes[-1] + intraday_min = ( + (_number(current.get("low")) / previous_close - 1) * 100 if previous_close else 0 + ) + body = abs(closes[-1] - current_open) + lower_shadow = max(0.0, min(current_open, closes[-1]) - _number(current.get("low"))) + lower_shadow_ratio = lower_shadow / body if body > 0 else (10.0 if lower_shadow > 0 else 0.0) + previous_volume_value = volumes[-2] if len(volumes) >= 2 else 0 + vol_vs_previous = volumes[-1] / previous_volume_value if previous_volume_value else 0 + broken = _broken_reversal_metrics(shape_rows, limit_flags, code, name) + netprofit_yoy = _optional_number(fundamental.get("netprofit_yoy")) + earnings_event = earnings_events.get(ts_code, {}) + announcement_date = str(earnings_event.get("ann_date") or "") + earnings_days = ( + sum(1 for value in dates if announcement_date < value <= actual_date) + if announcement_date and announcement_date <= actual_date + else None + ) + announcement_bar = next( + (item for item in shape_rows if str(item.get("trade_date") or "") == announcement_date), + None, + ) + announcement_bad = False + if announcement_bar is not None: + bar_index = shape_rows.index(announcement_bar) + prior_volumes = [ + _number(item.get("vol")) for item in shape_rows[max(0, bar_index - 5):bar_index] + if _number(item.get("vol")) > 0 + ] + volume_baseline = statistics.fmean(prior_volumes) if prior_volumes else 0 + announcement_bad = ( + _number(announcement_bar.get("close")) < _number(announcement_bar.get("open")) + and _number(announcement_bar.get("pct_chg")) < 0 + and volume_baseline > 0 + and _number(announcement_bar.get("vol")) / volume_baseline >= 1.8 + ) + popularity_row = popularity.get(ts_code) + institution_row = institutions.get(ts_code) + factors.append( + { + "code": code, + "ts_code": ts_code, + "name": name, + "sector": info.get("industry") or "其他", + "market": info.get("market") or "--", + "listed_days": listed_days, + "close": round(closes[-1], 2), + "price": round(closes[-1], 2), + "pct_chg": round(_number(current["pct_chg"]), 2), + "return_5d": round((closes[-1] / closes[-6] - 1) * 100, 2), + "return_10d": round((closes[-1] / closes[-11] - 1) * 100, 2), + "return_20d": round((closes[-1] / closes[-21] - 1) * 100, 2), + "return_60d": round(return_60d, 2), + "momentum_60_5": round(momentum_60_5, 2), + "above_ma20": int(closes[-1] > ma20), + "rsi_6": round(_rsi(closes, 6), 2), + "ma60_slope": round(ma60_slope, 3), + "ma20_slope_5d": round(ma20_slope, 3), + "ma_bull_alignment": int(ma_values[0] > ma_values[1] > ma_values[2] > ma_values[3]), + "drawdown_from_high_250": round(drawdown_250, 2), + "donchian_breakout_pct": round(breakout_pct, 2), + "range_20d": round(range_20d, 2), + "rs_high_120": int(len(rs_values) >= 120 and rs_values[-1] >= max(rs_values)), + "excess_return_60d": round(return_60d - benchmark_return_60, 2), + "weekly_trend_signal": int(len(weekly_closes) >= 30 and weekly_dif > 0 and weekly_dea > 0), + "daily_buy_trigger": int(daily_cross or daily_pullback), + "weekly_amount_trend": int( + len(weekly_amounts) >= 5 + and weekly_amounts[-1] >= statistics.fmean(weekly_amounts[-5:-1]) + ), + "volume_ratio_5d": round(volumes[-1] / previous_volume, 2) if previous_volume else 0, + "turnover_5d": round(turnover_5d, 2), + "volatility_10d": round(statistics.pstdev(returns_10), 2), + "amount_billion": round( + _number(current["amount"]) / (100000000 if realtime else 100000), 2 + ), + "turnover_rate": round( + _number(realtime.get("turnover_rate")) + if realtime else _number(indicator.get("turnover_rate")), + 2, + ), + "circ_mv_billion": round(_number(indicator.get("circ_mv")) / 10000, 2), + "total_mv_billion": round(_number(indicator.get("total_mv")) / 10000, 2), + "pe_ttm": _rounded_optional(indicator.get("pe_ttm"), 2), + "pb": _rounded_optional(indicator.get("pb"), 2), + "ps_ttm": _rounded_optional(indicator.get("ps_ttm"), 2), + "dividend_yield_ttm": _rounded_optional(indicator.get("dv_ttm"), 2), + "dividend_years": dividend_years, + "roe": _rounded_optional(fundamental.get("roe"), 2), + "roa": _rounded_optional(fundamental.get("roa"), 2), + "roic": _rounded_optional(fundamental.get("roic"), 2), + "gross_margin": _rounded_optional(fundamental.get("grossprofit_margin"), 2), + "netprofit_yoy": _rounded_optional(fundamental.get("netprofit_yoy"), 2), + "revenue_yoy": _rounded_optional(fundamental.get("or_yoy"), 2), + "ocf_to_opincome": _rounded_optional(fundamental.get("ocf_to_opincome"), 2), + "earnings_surprise_pct": _rounded_optional(earnings_event.get("surprise_pct"), 2), + "earnings_days_since_announce": earnings_days, + "earnings_event_quality": int(not announcement_bad) if earnings_days is not None else None, + "popularity_score": _rounded_optional( + popularity_row.get("combined_score") if popularity_row else None, 2 + ), + "popularity_rank_change": ( + int(popularity_row["rank_change"]) + if popularity_row and popularity_row.get("rank_change") is not None else None + ), + "popularity_dual_source": ( + int(bool(popularity_row.get("dual_source"))) if popularity_row else None + ), + "institution_net_buy_million": ( + round(_number(institution_row.get("net_buy_amount")) / 1_000_000, 2) + if institution_row else None + ), + "institution_seat_count": ( + int(institution_row.get("seat_count") or 0) if institution_row else None + ), + "net_flow_million": round(_number(flow.get("net_mf_amount")) / 100, 2), + "large_flow_million": round(_number(flow.get("large_net_amount")) / 100, 2), + "net_flow_5d_million": round( + sum(_number(item.get("net_mf_amount")) for item in flow_history) / 100, + 2, + ), + "flow_to_circ_mv_5d": round( + sum(_number(item.get("net_mf_amount")) for item in flow_history) + / _number(indicator.get("circ_mv")) * 100, + 4, + ) if _number(indicator.get("circ_mv")) else 0, + "limit_status": status, + "limit_streak": streak, + "is_limit_up_today": int(limit_flags[-1]), + "is_limit_down_today": int(_number(current.get("pct_chg")) <= -_limit_threshold(code, name)), + "auction_change": round(_number(auction_row.get("change")), 2), + "auction_amount_million": round(_number(auction_row.get("amount")) / 1_000_000, 2), + "auction_turnover_rate": round(_number(auction_row.get("turnover_rate")), 4), + "auction_volume_ratio": round(_number(auction_row.get("volume_ratio")), 2), + "relative_position_60": round(relative_position, 4), + "max_abs_change_15d": round(max((abs(value) for value in shape_changes[-15:]), default=0), 2), + "close_to_high_15d": round(closes[-1] / max(shape_high[-15:]), 4) if shape_high[-15:] and max(shape_high[-15:]) else 0, + "close_to_high_60d": round(closes[-1] / max(shape_high[-60:]), 4) if shape_high[-60:] and max(shape_high[-60:]) else 0, + "no_limit_30d": int(not any(limit_flags[-30:])), + "had_limit_80d": int(any(limit_flags[-80:-30] if len(limit_flags) > 30 else [])), + "no_limit_down_20d": int(not any( + _number(item.get("pct_chg")) <= -_limit_threshold(code, name) + for item in shape_rows[-20:] + )), + "financial_risk": int( + "ST" in name.upper() or "退" in name + or (netprofit_yoy is not None and netprofit_yoy <= -100) + ), + "prior_limit_streak": prior_streak, + "max_continuous_board_10d": _max_streak(limit_flags[-10:]), + "dragon_first_yin": int( + prior_streak >= 3 and not limit_flags[-1] and closes[-1] < current_open + ), + "yin_day_pct": round(_number(current.get("pct_chg")), 2), + "vol_vs_previous": round(vol_vs_previous, 3), + "broken_reversal": broken["signal"], + "days_since_broken": broken["days"], + "close_above_broken_high": broken["recovered"], + "vol_vs_broken_day": broken["volume_ratio"], + "recent_limit_up_5d": sum(limit_flags[-5:]), + "intraday_min_pct": round(intraday_min, 2), + "lower_shadow_ratio": round(lower_shadow_ratio, 2), + "previous_first_limit": int(previous_limit and not recent_prior_signal), + "previous_limit_signal": int((previous_limit or previous_touched) and not recent_prior_signal), + "previous_limit_streak": previous_streak, + "previous_amount_billion": round(_number(previous_bar.get("amount")) / 100000, 2), + } + ) + + market_return = statistics.fmean(row["return_5d"] for row in factors) if factors else 0 + sectors: dict[str, list[dict[str, Any]]] = defaultdict(list) + for row in factors: + sectors[row["sector"]].append(row) + sector_metrics = [] + market_amount = sum(max(0.0, row["amount_billion"]) for row in factors) + for sector_name, sector_rows in sectors.items(): + average_return = statistics.fmean(row["return_5d"] for row in sector_rows) + average_return_20d = statistics.fmean(row["return_20d"] for row in sector_rows) + sector_net_flow = sum(row["net_flow_5d_million"] for row in sector_rows) + limit_count = sum(row["limit_status"] == "涨停" or row["pct_chg"] >= 9.5 for row in sector_rows) + up_count = sum(row["pct_chg"] >= 5 for row in sector_rows) + breadth_ma20 = sum(row["above_ma20"] for row in sector_rows) / max(len(sector_rows), 1) * 100 + sector_growth = [ + statistics.fmean(values) + for row in sector_rows + if (values := [ + value for value in (row.get("revenue_yoy"), row.get("netprofit_yoy")) + if value is not None + ]) + ] + prosperity_raw = statistics.median(sector_growth) if sector_growth else -100.0 + average_turnover = statistics.fmean(row["turnover_rate"] for row in sector_rows) + amount_share = ( + sum(max(0.0, row["amount_billion"]) for row in sector_rows) / market_amount * 100 + if market_amount else 0.0 + ) + crowding_raw = average_turnover + amount_share + trend_raw = average_return_20d + breadth_ma20 / 10 + strength = min(100, max(0, 50 + average_return * 4 + limit_count * 3 + up_count * 0.6)) + sector_metrics.append( + { + "ts_code": sector_name, + "sector_return_20d": average_return_20d, + "sector_net_flow_5d_million": sector_net_flow, + "sector_prosperity_raw": prosperity_raw, + "sector_trend_raw": trend_raw, + "sector_crowding_raw": crowding_raw, + } + ) + stock_momentum_ranks = _percentile_map(sector_rows, "return_20d", "desc") + for row in sector_rows: + row["sector_strength"] = round(strength, 1) + row["sector_return_5d"] = round(average_return, 2) + row["sector_return_20d"] = round(average_return_20d, 2) + row["sector_net_flow_5d_million"] = round(sector_net_flow, 2) + row["sector_stock_momentum_rank"] = round( + stock_momentum_ranks.get(row["ts_code"], 0.0), 4 + ) + row["sector_limit_count"] = limit_count + row["sector_up_count"] = up_count + row["sector_breadth_ma20"] = round(breadth_ma20, 1) + row["relative_strength"] = round(row["return_5d"] - market_return, 2) + sector_momentum_ranks = _percentile_map( + sector_metrics, "sector_return_20d", "desc" + ) + sector_flow_ranks = _percentile_map( + sector_metrics, "sector_net_flow_5d_million", "desc" + ) + sector_prosperity_ranks = _percentile_map( + sector_metrics, "sector_prosperity_raw", "desc" + ) + sector_trend_ranks = _percentile_map( + sector_metrics, "sector_trend_raw", "desc" + ) + sector_crowding_ranks = _percentile_map( + sector_metrics, "sector_crowding_raw", "desc" + ) + for sector_name, sector_rows in sectors.items(): + prosperity_rank = sector_prosperity_ranks.get(sector_name, 0.0) + trend_rank = sector_trend_ranks.get(sector_name, 0.0) + crowding_rank = sector_crowding_ranks.get(sector_name, 0.0) + composite_score = ( + prosperity_rank * 0.40 + trend_rank * 0.30 + (1 - crowding_rank) * 0.30 + ) + for row in sector_rows: + row["sector_momentum_rank"] = round( + sector_momentum_ranks.get(sector_name, 0.0), 4 + ) + row["sector_flow_rank"] = round( + sector_flow_ranks.get(sector_name, 0.0), 4 + ) + row["sector_prosperity_rank"] = round(prosperity_rank, 4) + row["sector_trend_rank"] = round(trend_rank, 4) + row["sector_crowding_rank"] = round(crowding_rank, 4) + row["sector_composite_score"] = round(composite_score, 4) + + factor_specs = { + "factor_value_score": (("pe_ttm", "asc"), ("pb", "asc"), ("dividend_yield_ttm", "desc")), + "factor_growth_score": (("revenue_yoy", "desc"), ("netprofit_yoy", "desc")), + "factor_quality_score": (("roe", "desc"), ("roic", "desc"), ("gross_margin", "desc")), + "factor_momentum_score": (("momentum_60_5", "desc"), ("relative_strength", "desc")), + "factor_sentiment_score": (("turnover_rate", "desc"), ("volume_ratio_5d", "desc")), + } + for output_field, specs in factor_specs.items(): + maps = [_available_percentile_map(factors, field, direction) for field, direction in specs] + for row in factors: + values = [mapping.get(row["ts_code"]) for mapping in maps] + available = [value for value in values if value is not None] + row[output_field] = round(statistics.fmean(available), 4) if available else None + + return_rank_map = _available_percentile_map(factors, "return_20d", "desc") + factor_weights = {} + for output_field in factor_specs: + pairs = [ + (row.get(output_field), return_rank_map.get(row["ts_code"])) + for row in factors + if row.get(output_field) is not None and return_rank_map.get(row["ts_code"]) is not None + ] + correlation = _pearson([pair[0] for pair in pairs], [pair[1] for pair in pairs]) + factor_weights[output_field] = max(0.05, correlation) + factor_weight_total = sum(factor_weights.values()) or 1 + for row in factors: + weighted = [ + (row.get(field), weight) + for field, weight in factor_weights.items() + if row.get(field) is not None + ] + row["multi_factor_composite"] = round( + sum(value * weight for value, weight in weighted) + / (sum(weight for _, weight in weighted) or factor_weight_total), + 4, + ) if weighted else None + + size_ranks = _available_percentile_map(factors, "total_mv_billion", "desc") + large_rows = [row for row in factors if (size_ranks.get(row["ts_code"]) or 0) >= 0.70] + small_rows = [ + row for row in factors + if size_ranks.get(row["ts_code"]) is not None + and size_ranks[row["ts_code"]] <= 0.30 + ] + large_return = statistics.fmean(row["return_20d"] for row in large_rows) if large_rows else 0 + small_return = statistics.fmean(row["return_20d"] for row in small_rows) if small_rows else 0 + prefer_large = large_return >= small_return + growth_rows = [row for row in factors if (row.get("factor_growth_score") or 0) >= 0.70] + value_rows = [row for row in factors if (row.get("factor_value_score") or 0) >= 0.70] + growth_return = statistics.fmean(row["return_20d"] for row in growth_rows) if growth_rows else 0 + value_return = statistics.fmean(row["return_20d"] for row in value_rows) if value_rows else 0 + prefer_growth = growth_return >= value_return + for row in factors: + size_rank = size_ranks.get(row["ts_code"]) + row["style_size_fit"] = round( + size_rank if prefer_large else 1 - size_rank, 4 + ) if size_rank is not None else None + style_factor = "factor_growth_score" if prefer_growth else "factor_value_score" + row["style_growth_fit"] = row.get(style_factor) + style_values = [ + value for value in (row.get("style_size_fit"), row.get("style_growth_fit")) + if value is not None + ] + row["style_fit_score"] = round(statistics.fmean(style_values), 4) if style_values else None + momentum_ranks = _percentile_map(factors, "momentum_60_5", "desc") + return_ranks = _percentile_map(factors, "return_5d", "desc") + market_height = max((int(row.get("limit_streak") or 0) for row in factors), default=0) + prior_market_height = max((int(row.get("prior_limit_streak") or 0) for row in factors), default=0) + for row in factors: + row["momentum_60_5_rank"] = round(momentum_ranks.get(row["ts_code"], 0.0), 4) + row["return_5d_rank"] = round(return_ranks.get(row["ts_code"], 0.0), 4) + is_height = market_height >= 2 and int(row.get("limit_streak") or 0) == market_height + row["is_market_height"] = int(is_height) + row["new_space_board"] = int( + is_height + and not ( + prior_market_height >= 2 + and int(row.get("prior_limit_streak") or 0) == prior_market_height + ) + ) + return factors, actual_date diff --git a/backend/features/screener/formula.py b/backend/features/screener/formula.py new file mode 100644 index 0000000..0a9b302 --- /dev/null +++ b/backend/features/screener/formula.py @@ -0,0 +1,146 @@ +from __future__ import annotations + +import copy +from typing import Any + +from backend.features.screener.catalog import ( + ALLOWED_OPERATORS, + BUILTIN_STRATEGIES, + FACTOR_FIELDS, + REGIMES, +) +from backend.features.screener.indicators import _matches, _percentile_map, _risk_flags + + +class FormulaEvaluator: + def validate_formula(self, formula: dict[str, Any]) -> dict[str, Any]: + if not isinstance(formula, dict): + raise ValueError("选股公式必须是 JSON 对象。") + result = copy.deepcopy(formula) + universe = result.setdefault("universe", {}) + universe["exclude_st"] = bool(universe.get("exclude_st", True)) + universe["listed_days_min"] = max(0, min(5000, int(universe.get("listed_days_min", 120)))) + filters = result.setdefault("filters", []) + if not isinstance(filters, list) or len(filters) > 20: + raise ValueError("筛选条件必须是列表,且不能超过 20 条。") + for condition in filters: + field = condition.get("field") + operator = condition.get("op") + if field not in FACTOR_FIELDS: + raise ValueError(f"不支持的选股因子:{field}") + if operator not in ALLOWED_OPERATORS: + raise ValueError(f"不支持的运算符:{operator}") + if "value" not in condition: + raise ValueError(f"因子 {field} 缺少比较值。") + scores = result.setdefault("score", []) + if not isinstance(scores, list) or not scores or len(scores) > 12: + raise ValueError("评分因子应为 1 至 12 条。") + for item in scores: + if item.get("field") not in FACTOR_FIELDS: + raise ValueError(f"不支持的评分因子:{item.get('field')}") + item["weight"] = float(item.get("weight", 0)) + if item["weight"] <= 0 or item["weight"] > 1: + raise ValueError("评分权重必须大于 0 且不超过 1。") + if item.get("direction", "desc") not in {"asc", "desc"}: + raise ValueError("评分方向只能是 asc 或 desc。") + item["direction"] = item.get("direction", "desc") + result["limit"] = max(1, min(50, int(result.get("limit", 15)))) + result["min_score"] = max(0, min(1, float(result.get("min_score", 0)))) + return result + + def apply_formula( + self, rows: list[dict[str, Any]], formula: dict[str, Any], regime: str + ) -> list[dict[str, Any]]: + universe = formula["universe"] + eligible = [] + score_fields = [item["field"] for item in formula["score"]] + for row in rows: + name = str(row.get("name") or "") + if universe.get("exclude_st") and ("ST" in name.upper() or "退" in name): + continue + if row.get("listed_days", 0) < universe.get("listed_days_min", 0): + continue + if any(row.get(field) is None for field in score_fields): + continue + if all(_matches(row.get(item["field"]), item["op"], item["value"]) for item in formula["filters"]): + eligible.append(row) + if not eligible: + return [] + + percentiles = { + item["field"]: _percentile_map(eligible, item["field"], item["direction"]) + for item in formula["score"] + } + weight_total = sum(item["weight"] for item in formula["score"]) + results = [] + for row in eligible: + contributions = [] + score = 0.0 + for item in formula["score"]: + percentile = percentiles[item["field"]].get(row["ts_code"], 0.5) + points = percentile * item["weight"] / weight_total + score += points + contributions.append( + { + "field": item["field"], + "label": FACTOR_FIELDS[item["field"]], + "value": row.get(item["field"], 0), + "points": round(points * 100, 1), + } + ) + if score < formula["min_score"]: + continue + contributions.sort(key=lambda item: item["points"], reverse=True) + item = dict(row) + item["score"] = round(score, 4) + item["score_display"] = round(score * 100, 1) + item["contributions"] = contributions + item["reason"] = "、".join(entry["label"] for entry in contributions[:3]) + include_regime_risk = formula.get("meta", {}).get("library") != "curated" + item["risk_flags"] = _risk_flags(row, regime, include_regime_risk) + results.append(item) + results.sort(key=lambda item: item["score"], reverse=True) + return results[: formula["limit"]] + + +def compile_local_strategy(prompt: str, regime: str) -> dict[str, Any]: + base = next((item for item in BUILTIN_STRATEGIES if regime in item["regimes"]), BUILTIN_STRATEGIES[1]) + formula = copy.deepcopy(base["formula"]) + description = prompt.strip() or base["description"] + lowered = description.lower() + if "低吸" in description: + formula["filters"] = [item for item in formula["filters"] if item["field"] != "pct_chg"] + formula["filters"].append({"field": "pct_chg", "op": "between", "value": [-3, 3]}) + if "放量" in description: + formula["filters"].append({"field": "volume_ratio_5d", "op": ">=", "value": 1.2}) + if "强势" in description or "突破" in description: + formula["filters"].append({"field": "return_5d", "op": ">=", "value": 5}) + if "低波" in description or "稳健" in description: + formula["score"].append({"field": "volatility_10d", "weight": 0.18, "direction": "asc"}) + if "资金" in description or "主力" in description: + formula["score"].append({"field": "net_flow_million", "weight": 0.18, "direction": "desc"}) + if "小市值" in description or "小盘" in description: + formula["score"].append({"field": "circ_mv_billion", "weight": 0.15, "direction": "asc"}) + if "竞价" in description: + formula["filters"].extend( + [ + {"field": "auction_change", "op": "between", "value": [0.5, 8]}, + {"field": "auction_amount_million", "op": ">=", "value": 2}, + ] + ) + formula["score"].extend( + [ + {"field": "auction_volume_ratio", "weight": 0.20, "direction": "desc"}, + {"field": "auction_amount_million", "weight": 0.18, "direction": "desc"}, + ] + ) + if "少量" in description or "精选" in description: + formula["limit"] = min(formula["limit"], 8) + formula["score"] = formula["score"][:12] + return { + "name": f"{REGIMES.get(regime, regime)}自定义策略", + "description": description, + "regimes": [regime], + "formula": formula, + "compiler": "local_template", + } diff --git a/backend/features/screener/indicators.py b/backend/features/screener/indicators.py new file mode 100644 index 0000000..f7c8efe --- /dev/null +++ b/backend/features/screener/indicators.py @@ -0,0 +1,238 @@ +from __future__ import annotations + +import math +import statistics +from datetime import datetime +from typing import Any + +from backend.data.numbers import finite_number as _number + + +def _optional_number(value: Any) -> float | None: + if value in (None, ""): + return None + try: + result = float(value) + except (TypeError, ValueError): + return None + return result if math.isfinite(result) else None + + +def _rounded_optional(value: Any, digits: int = 2) -> float | None: + parsed = _optional_number(value) + return round(parsed, digits) if parsed is not None else None + + +def _limit_threshold(code: str, name: str) -> float: + if code.startswith(("4", "8")): + return 29.0 + if code.startswith(("30", "68")): + return 19.0 + return 9.5 + + +def _ending_streak(flags: list[bool], end_index: int | None = None) -> int: + if not flags: + return 0 + index = len(flags) - 1 if end_index is None else min(end_index, len(flags) - 1) + streak = 0 + while index >= 0 and flags[index]: + streak += 1 + index -= 1 + return streak + + +def _max_streak(flags: list[bool]) -> int: + best = current = 0 + for value in flags: + current = current + 1 if value else 0 + best = max(best, current) + return best + + +def _rsi(values: list[float], period: int = 6) -> float: + if len(values) <= period: + return 50.0 + changes = [values[index] - values[index - 1] for index in range(len(values) - period, len(values))] + gains = sum(max(change, 0.0) for change in changes) / period + losses = sum(max(-change, 0.0) for change in changes) / period + if losses == 0: + return 100.0 if gains > 0 else 50.0 + return 100 - 100 / (1 + gains / losses) + + +def _ema(values: list[float], period: int) -> list[float]: + if not values: + return [] + alpha = 2 / (period + 1) + result = [values[0]] + for value in values[1:]: + result.append(value * alpha + result[-1] * (1 - alpha)) + return result + + +def _macd_series(values: list[float]) -> tuple[list[float], list[float]]: + fast = _ema(values, 12) + slow = _ema(values, 26) + dif = [left - right for left, right in zip(fast, slow)] + return dif, _ema(dif, 9) + + +def _macd_last(values: list[float]) -> tuple[float, float]: + dif, dea = _macd_series(values) + return (dif[-1], dea[-1]) if dif and dea else (0.0, 0.0) + + +def _weekly_series(rows: list[dict[str, Any]]) -> tuple[list[float], list[float]]: + weeks: dict[str, tuple[float, float]] = {} + for row in rows: + trade_date = str(row.get("trade_date") or "") + try: + key = datetime.strptime(trade_date, "%Y%m%d").strftime("%G-%V") + except ValueError: + continue + close = _number(row.get("close")) + amount = _number(row.get("amount")) + previous = weeks.get(key, (close, 0.0)) + weeks[key] = (close, previous[1] + amount) + ordered = list(weeks.values()) + return [item[0] for item in ordered], [item[1] for item in ordered] + + +def _broken_reversal_metrics( + rows: list[dict[str, Any]], flags: list[bool], code: str, name: str, +) -> dict[str, Any]: + result = {"signal": 0, "days": 0, "recovered": 0, "volume_ratio": 0.0} + if not rows or not flags[-1]: + return result + current_close = _number(rows[-1].get("close")) + current_volume = _number(rows[-1].get("vol")) + for days in range(1, 4): + index = len(rows) - 1 - days + if index <= 0 or flags[index] or _ending_streak(flags, index - 1) < 2: + continue + broken_high = _number(rows[index].get("high")) + broken_volume = _number(rows[index].get("vol")) + recovered = int(current_close >= broken_high > 0) + volume_ratio = current_volume / broken_volume if broken_volume else 0.0 + return { + "signal": int(recovered and volume_ratio >= 1), + "days": days, + "recovered": recovered, + "volume_ratio": round(volume_ratio, 3), + } + return result + + +def _is_limit_bar(rows: list[dict[str, Any]], index: int, code: str, name: str) -> bool: + if index < 0 or index >= len(rows): + return False + return _number(rows[index].get("pct_chg")) >= _limit_threshold(code, name) + + +def _touched_limit_bar(rows: list[dict[str, Any]], index: int, code: str, name: str) -> bool: + if index <= 0 or index >= len(rows): + return False + previous_close = _number(rows[index - 1].get("close")) + high = _number(rows[index].get("high")) + if previous_close <= 0 or high <= 0: + return False + touched_change = (high / previous_close - 1) * 100 + return touched_change >= _limit_threshold(code, name) + + +def _matches(actual: Any, operator: str, expected: Any) -> bool: + if actual is None: + return False + try: + if operator == "between": + return float(expected[0]) <= float(actual) <= float(expected[1]) + if operator == "in": + return actual in expected + if operator == ">": + return float(actual) > float(expected) + if operator == ">=": + return float(actual) >= float(expected) + if operator == "<": + return float(actual) < float(expected) + if operator == "<=": + return float(actual) <= float(expected) + if operator == "==": + return actual == expected or float(actual) == float(expected) + if operator == "!=": + return actual != expected + except (TypeError, ValueError, IndexError): + return False + return False + + +def _percentile_map(rows: list[dict[str, Any]], field: str, direction: str) -> dict[str, float]: + ordered = sorted(rows, key=lambda item: _number(item.get(field))) + denominator = max(1, len(ordered) - 1) + result = {} + for index, row in enumerate(ordered): + percentile = index / denominator + result[row["ts_code"]] = 1 - percentile if direction == "asc" else percentile + return result + + +def _available_percentile_map( + rows: list[dict[str, Any]], field: str, direction: str, +) -> dict[str, float | None]: + available = [row for row in rows if row.get(field) is not None] + result: dict[str, float | None] = { + str(row.get("ts_code") or ""): None for row in rows + } + if not available: + return result + ordered = sorted(available, key=lambda item: _number(item.get(field))) + denominator = max(1, len(ordered) - 1) + for index, row in enumerate(ordered): + percentile = 0.5 if len(ordered) == 1 else index / denominator + result[str(row.get("ts_code") or "")] = ( + 1 - percentile if direction == "asc" else percentile + ) + return result + + +def _pearson(first: list[float], second: list[float]) -> float: + if len(first) != len(second) or len(first) < 20: + return 0.0 + first_mean = statistics.fmean(first) + second_mean = statistics.fmean(second) + numerator = sum( + (left - first_mean) * (right - second_mean) + for left, right in zip(first, second) + ) + left_sum = sum((value - first_mean) ** 2 for value in first) + right_sum = sum((value - second_mean) ** 2 for value in second) + denominator = math.sqrt(left_sum * right_sum) + return numerator / denominator if denominator else 0.0 + + +def _risk_flags( + row: dict[str, Any], regime: str, include_regime_risk: bool = True +) -> list[str]: + flags = [] + if row.get("pct_chg", 0) >= 9.5: + flags.append("当日接近涨停,次日存在高开与无法成交风险") + if row.get("return_10d", 0) >= 25: + flags.append("短期累计涨幅较高") + if row.get("volatility_10d", 0) >= 7: + flags.append("波动率偏高") + if row.get("amount_billion", 0) < 1: + flags.append("成交承载力偏弱") + if include_regime_risk and regime == "retreat": + flags.append("市场处于退潮阶段,策略可能选择空仓") + return flags + + +def _regime_reason(regime: str) -> str: + return { + "ice": "情绪和赚钱效应处于低位,重点观察率先抗跌与转折信号。", + "repair": "核心指标从低位改善,适合观察率先修复且有板块共振的方向。", + "fermentation": "赚钱效应扩散,主线和梯队持续增强。", + "climax": "情绪处于高位,后排跟风与兑现风险同时上升。", + "divergence": "指数或核心仍强,但广度、封板质量开始分化。", + "retreat": "情绪指标继续走弱,应提高筛选门槛并接受无候选结果。", + }.get(regime, "市场阶段待确认。") diff --git a/backend/features/screener/regime.py b/backend/features/screener/regime.py new file mode 100644 index 0000000..df81525 --- /dev/null +++ b/backend/features/screener/regime.py @@ -0,0 +1,53 @@ +from __future__ import annotations + +from typing import Any + +from backend.data.numbers import finite_number as _number +from backend.features.screener.catalog import REGIMES +from backend.features.screener.indicators import _regime_reason +from backend.features.sentiment.engine import build_sentiment_history, latest_contiguous_history +from database import ReviewDatabase + + +class RegimeDetector: + def __init__(self, database: ReviewDatabase) -> None: + self.database = database + + def detect_regime(self, trade_date: str) -> dict[str, Any]: + series = latest_contiguous_history( + build_sentiment_history(self.database.list_snapshot_payloads(trade_date, 260)) + ) + if not series: + return { + "id": "repair", "label": REGIMES["repair"], "confidence": 25, + "reason": "复盘快照不足,暂按中性修复处理。", "evidence": [], "history": [], + } + current = series[-1] + previous = series[-2] if len(series) > 1 else current + score = _number(current.get("score")) + previous_score = _number(previous.get("score")) + delta = score - previous_score + seal_rate = _number(current.get("seal_rate")) + limit_up = _number(current.get("limit_up_count")) + broken = _number(current.get("broken_count")) + regime = next( + (key for key, label in REGIMES.items() if label == current.get("phase")), + "divergence", + ) + confidence = min(92, 45 + len(series[-8:]) * 5 + min(abs(delta), 12)) + evidence = [ + f"情绪温度 {score:.0f},较前一交易日 {delta:+.0f},{current.get('direction') or '持平'}", + f"封板率 {seal_rate:.1f}%", + f"涨停 {limit_up:.0f} 家,炸板 {broken:.0f} 家", + ] + return { + "id": regime, + "label": REGIMES[regime], + "confidence": round(confidence), + "reason": _regime_reason(regime), + "evidence": evidence, + "history": [ + {"trade_date": item["trade_date"], "score": _number(item.get("score"))} + for item in series[-8:] + ], + } diff --git a/backend/features/screener/repository.py b/backend/features/screener/repository.py index 16f962b..9d3f16a 100644 --- a/backend/features/screener/repository.py +++ b/backend/features/screener/repository.py @@ -433,11 +433,6 @@ class ScreenerRepositoryMixin: } def snapshot_summaries(self, end_date: str, limit: int = 10) -> list[dict[str, Any]]: - try: - from sentiment_engine import build_sentiment_history - except ModuleNotFoundError: - from .sentiment_engine import build_sentiment_history - series = build_sentiment_history(self.list_snapshot_payloads(end_date, 260)) return [ { diff --git a/backend/features/screener/routes.py b/backend/features/screener/routes.py new file mode 100644 index 0000000..a3a93ca --- /dev/null +++ b/backend/features/screener/routes.py @@ -0,0 +1,106 @@ +from __future__ import annotations + +import json +import re +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs + + +class ScreenerRoutesMixin: + def _handle_screener_get(self, parsed) -> bool: + if parsed.path == "/api/screener/setup": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + self.send_json(self.application_service.screener_setup(trade_date)) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/screener/tracking": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.screener_tracking(int(query.get("limit", ["12"])[0])) + ) + except (TypeError, ValueError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False + + def _handle_screener_post(self, parsed) -> bool: + if parsed.path == "/api/screener/tracking": + try: + result = self.application_service.add_screener_tracking(self.read_json_body()) + self.send_json({"ok": True, **result}) + except (ValueError, json.JSONDecodeError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False + + def _handle_screener_delete(self, parsed) -> bool: + strategy_match = re.fullmatch(r"/api/screener/strategies/(\d+)", parsed.path) + if strategy_match: + try: + result = self.application_service.delete_screener_strategy(int(strategy_match.group(1))) + self.send_json({"ok": True, **result}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + tracking_match = re.fullmatch(r"/api/screener/tracking/(\d+)", parsed.path) + if tracking_match: + result = self.application_service.remove_screener_tracking(int(tracking_match.group(1))) + self.send_json({"ok": True, **result}) + return True + return False + + def sync_screener_data(self) -> None: + try: + body = self.read_json_body() + result = self.application_service.sync_screener_data( + str(body.get("trade_date") or date.today().isoformat()), + int(body.get("lookback") or 45), + ) + self.send_json({"ok": True, "result": result}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + except Exception as exc: + self.send_json({"error": f"因子数据同步失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) + + def compile_screener_strategy(self) -> None: + try: + body = self.read_json_body() + result = self.application_service.compile_screener_strategy( + str(body.get("prompt") or ""), str(body.get("regime") or "") + ) + self.send_json({"ok": True, "strategy": result}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + + def save_screener_strategy(self) -> None: + try: + body = self.read_json_body() + result = self.application_service.save_screener_strategy(body) + self.send_json({"ok": True, **result}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + + def run_screener(self) -> None: + try: + body = self.read_json_body() + result = self.application_service.run_screener(body) + self.send_json({"ok": True, "result": result}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + except Exception as exc: + self.send_json({"error": f"选股执行失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) + + def refresh_screener_tracking(self) -> None: + try: + body = self.read_json_body(True) + trade_date = str(body.get("trade_date") or date.today().isoformat()) + self.send_json({"ok": True, **self.application_service.refresh_screener_tracking(trade_date)}) + except (ValueError, json.JSONDecodeError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + except Exception as exc: + self.send_json({"error": f"跟踪刷新失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) diff --git a/backend/features/screener/selection.py b/backend/features/screener/selection.py new file mode 100644 index 0000000..34e98f1 --- /dev/null +++ b/backend/features/screener/selection.py @@ -0,0 +1,138 @@ +from __future__ import annotations + +from datetime import datetime +from typing import Any + +from backend.bootstrap.config import display_compact_date as _display_date +from backend.features.screener.backtest import BacktestRunner +from backend.features.screener.catalog import REGIMES +from backend.features.screener.factors import FactorBuilder +from backend.features.screener.formula import FormulaEvaluator +from database import ReviewDatabase + + +class SelectionRunner: + def __init__( + self, + database: ReviewDatabase, + factor_builder: FactorBuilder, + formula_evaluator: FormulaEvaluator, + backtest_runner: BacktestRunner, + ) -> None: + self.database = database + self.factor_builder = factor_builder + self.formula_evaluator = formula_evaluator + self.backtest_runner = backtest_runner + + def validate_formula(self, formula: dict[str, Any]) -> dict[str, Any]: + return self.formula_evaluator.validate_formula(formula) + + def build_factors( + self, + trade_date: str, + realtime_snapshot: dict[str, Any] | None, + history_days: int, + ) -> tuple[list[dict[str, Any]], str]: + return self.factor_builder.build_factors( + trade_date, realtime_snapshot, history_days + ) + + def apply_formula( + self, rows: list[dict[str, Any]], formula: dict[str, Any], regime: str + ) -> list[dict[str, Any]]: + return self.formula_evaluator.apply_formula(rows, formula, regime) + + def backtest(self, trade_date: str, formula: dict[str, Any]) -> dict[str, Any]: + return self.backtest_runner.backtest(trade_date, formula) + + def screen( + self, user_id: int, trade_date: str, formula: dict[str, Any], regime: str, + strategy_name: str, run_backtest: bool = True, + realtime_snapshot: dict[str, Any] | None = None, + mode: str = "smart", + prepared_factors: list[dict[str, Any]] | None = None, + prepared_date: str = "", + ) -> dict[str, Any]: + mode = mode if mode in {"smart", "curated", "quant"} else "smart" + formula = self.validate_formula(formula) + if prepared_factors is None: + history_days = int((formula.get("meta") or {}).get("history_days") or 80) + factors, actual_date = self.build_factors( + trade_date, realtime_snapshot, history_days + ) + else: + factors = prepared_factors + actual_date = prepared_date or trade_date + candidates = self.apply_formula(factors, formula, regime) + backtest = self.backtest(actual_date, formula) if run_backtest else None + required_fields = sorted({ + str(item.get("field") or "") + for item in list(formula.get("filters") or []) + list(formula.get("score") or []) + if item.get("field") + }) + complete_rows = sum( + 1 for row in factors + if all(row.get(field) is not None for field in required_fields) + ) + coverage = round(complete_rows / len(factors) * 100, 1) if factors else 0.0 + health_status = "normal" if candidates else "no_signal" + if backtest and backtest["samples"] >= 20: + for candidate in candidates: + estimate = backtest["win_rate"] * 0.65 + candidate["score"] * 100 * 0.35 + candidate["historical_probability"] = round(min(95, max(5, estimate)), 1) + candidate["probability_samples"] = backtest["samples"] + else: + for candidate in candidates: + candidate["historical_probability"] = None + candidate["probability_samples"] = backtest["samples"] if backtest else 0 + result = { + "meta": { + "trade_date": _display_date(actual_date), + "regime": regime, + "regime_label": REGIMES.get(regime, regime), + "strategy_name": strategy_name, + "mode": mode, + "library_version": int( + (formula.get("meta") or {}).get("library_version") or 0 + ), + "universe_count": len(factors), + "candidate_count": len(candidates), + "updated_at": datetime.now().astimezone().isoformat(timespec="seconds"), + "health": { + "status": health_status, + "required_field_count": len(required_fields), + "complete_rows": complete_rows, + "universe_rows": len(factors), + "coverage": coverage, + "signal_count": len(candidates), + }, + "selection_source": ( + "tushare_rt_k+history" if realtime_snapshot else "historical_eod" + ), + "realtime": bool(realtime_snapshot), + "history_cutoff": ( + str(realtime_snapshot.get("previous_trade_date") or "") + if realtime_snapshot else actual_date + ), + "factor_freshness": { + "realtime": [ + "价格", "涨跌幅", "成交量", "成交额", "换手率", + "均线位置", "5/10日动量", "板块强度", "开盘竞价", + ] if realtime_snapshot else [], + "historical": ["历史波动率", "流通市值", "资金流", "竞价因子", "回测"], + }, + }, + "formula": formula, + "candidates": candidates, + "backtest": backtest, + "disclaimer": ( + "候选仅由策略条件与当日数据计算;历史统计不代表未来收益。" + if mode == "curated" + else "概率为历史条件估计,不代表未来收益;退潮或样本不足时允许无候选。" + ), + } + run_id = self.database.save_screener_run( + user_id, actual_date, regime, strategy_name, formula, result, mode + ) + result["meta"]["run_id"] = run_id + return result diff --git a/backend/features/screener/service.py b/backend/features/screener/service.py index d22ae06..e74a109 100644 --- a/backend/features/screener/service.py +++ b/backend/features/screener/service.py @@ -12,13 +12,9 @@ from backend.features.screener.compiler import ( LLMCompilerError, compile_strategy_with_llm, ) -from backend.features.screener.engine import ( - FACTOR_FIELDS, - FACTOR_GROUPS, - REGIMES, - FactorDataService, - compile_local_strategy, -) +from backend.features.screener.catalog import FACTOR_FIELDS, FACTOR_GROUPS, REGIMES +from backend.features.screener.data_sync import FactorDataService +from backend.features.screener.formula import compile_local_strategy SCREENER_LIBRARY_VERSION = 8 diff --git a/backend/features/sentiment/routes.py b/backend/features/sentiment/routes.py new file mode 100644 index 0000000..be34aa1 --- /dev/null +++ b/backend/features/sentiment/routes.py @@ -0,0 +1,19 @@ +from __future__ import annotations + +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs + + +class SentimentRoutesMixin: + def _handle_sentiment_get(self, parsed) -> bool: + if parsed.path == "/api/sentiment/history": + query = parse_qs(parsed.query) + trade_date = query.get("trade_date", [date.today().isoformat()])[0] + try: + limit = int(query.get("limit", ["20"])[0]) + self.send_json(self.application_service.sentiment_history(trade_date, limit)) + except (TypeError, ValueError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/features/system/routes.py b/backend/features/system/routes.py new file mode 100644 index 0000000..5956cc9 --- /dev/null +++ b/backend/features/system/routes.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +from datetime import datetime +from http import HTTPStatus + + +class SystemRoutesMixin: + def _handle_system_public_get(self, parsed) -> bool: + if parsed.path == "/api/health": + self.send_json( + { + "ok": True, + "storage": "sqlite", + "account_required": True, + "time": datetime.now().astimezone().isoformat(timespec="seconds"), + } + ) + return True + return False + + def _handle_system_get(self, parsed) -> bool: + if parsed.path == "/api/admin/settings": + self.send_json( + {"ok": True, **self.application_service.system_status(), "users": self.application_service.admin_users()} + ) + return True + return False + + def backfill_data(self) -> None: + try: + body = self.read_json_body() + results = self.application_service.backfill( + str(body.get("start_date") or ""), + str(body.get("end_date") or ""), + ) + self.send_json({"ok": True, "results": results}) + except ValueError as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + except Exception as exc: + self.send_json({"error": f"历史回补失败:{exc}"}, HTTPStatus.INTERNAL_SERVER_ERROR) diff --git a/backend/features/system/service.py b/backend/features/system/service.py new file mode 100644 index 0000000..4f14ebe --- /dev/null +++ b/backend/features/system/service.py @@ -0,0 +1,254 @@ +from __future__ import annotations + +import re +import secrets +from typing import Any + +from backend.bootstrap.config import TOKEN_PATTERN, validate_text + + +class SystemServiceMixin: + def _load_system_credentials(self, environment: dict[str, str]) -> dict[str, Any]: + encrypted = self.database.get_system_setting("credentials") + current = self.vault.decrypt_json(encrypted) if encrypted else {} + changed = False + first_user_id = self.database.first_user_id() + first_personal: dict[str, Any] = {} + if first_user_id: + first_encrypted = self.database.get_user_credentials(first_user_id) + first_personal = self.vault.decrypt_json(first_encrypted) if first_encrypted else {} + defaults = { + "tushare_token": environment.get("tushare_token") or first_personal.get("tushare_token") or "", + "ifind_refresh_token": environment.get("ifind_refresh_token") or "", + "ifind_access_token": environment.get("ifind_access_token") or "", + "platform_llm_primary_api_key": environment.get("platform_llm_primary_api_key") or first_personal.get("llm_primary_api_key") or "", + "platform_llm_primary_base_url": environment.get("platform_llm_primary_base_url") or first_personal.get("llm_primary_base_url") or "https://api.openai.com/v1", + "platform_llm_primary_model": environment.get("platform_llm_primary_model") or first_personal.get("llm_primary_model") or "", + "platform_llm_fallback_api_key": environment.get("platform_llm_fallback_api_key") or first_personal.get("llm_fallback_api_key") or "", + "platform_llm_fallback_base_url": environment.get("platform_llm_fallback_base_url") or first_personal.get("llm_fallback_base_url") or "", + "platform_llm_fallback_model": environment.get("platform_llm_fallback_model") or first_personal.get("llm_fallback_model") or "", + "member_daily_limit": 50, + "background_refresh_enabled": True, + } + for key, value in defaults.items(): + if key not in current: + current[key] = value + changed = True + if not isinstance(current.get("llm_models"), list): + migrated_models: list[dict[str, str]] = [] + for role, label in (("primary", "原主模型"), ("fallback", "原辅助模型")): + profile = { + "api_key": str(current.get(f"platform_llm_{role}_api_key") or ""), + "base_url": str(current.get(f"platform_llm_{role}_base_url") or ""), + "model": str(current.get(f"platform_llm_{role}_model") or ""), + } + if profile["api_key"] or profile["model"]: + model_id = f"migrated-{role}" + migrated_models.append( + {"id": model_id, "name": label, **profile} + ) + current[f"{role}_model_id"] = model_id + current["llm_models"] = migrated_models + current.setdefault("primary_model_id", "") + current.setdefault("fallback_model_id", "") + changed = True + if changed or not encrypted: + self.database.save_system_setting("credentials", self.vault.encrypt_json(current)) + for row in self.database.list_user_credentials(): + personal = self.vault.decrypt_json(str(row.get("encrypted_payload") or "")) + if "tushare_token" in personal: + personal.pop("tushare_token", None) + self.database.save_user_credentials( + int(row["user_id"]), self.vault.encrypt_json(personal) + ) + return current + + def _save_system_credentials(self, credentials: dict[str, Any]) -> None: + with self.system_lock: + self.database.save_system_setting("credentials", self.vault.encrypt_json(credentials)) + self._system_credentials = dict(credentials) + if hasattr(self, "ifind"): + self.ifind.set_credentials( + str(credentials.get("ifind_refresh_token") or ""), + str(credentials.get("ifind_access_token") or ""), + ) + + @property + def configured(self) -> bool: + return bool(self.token) + + def _credentials(self) -> dict[str, str]: + credentials = getattr(self._request_context, "credentials", {}) + return { + "llm_primary_api_key": str(credentials.get("llm_primary_api_key") or ""), + "llm_primary_base_url": str( + credentials.get("llm_primary_base_url") or "https://api.openai.com/v1" + ), + "llm_primary_model": str(credentials.get("llm_primary_model") or ""), + "llm_fallback_api_key": str(credentials.get("llm_fallback_api_key") or ""), + "llm_fallback_base_url": str(credentials.get("llm_fallback_base_url") or ""), + "llm_fallback_model": str(credentials.get("llm_fallback_model") or ""), + } + + def _save_credentials(self, credentials: dict[str, str]) -> None: + self.database.save_user_credentials( + self.current_user_id, + self.vault.encrypt_json(credentials), + ) + self._request_context.credentials = dict(credentials) + + @property + def token(self) -> str: + return str(self._system_credentials.get("tushare_token") or "") + + def system_status(self) -> dict[str, Any]: + platform = self._platform_llm_profile() + model_pool = [] + for item in self._system_credentials.get("llm_models") or []: + if not isinstance(item, dict): + continue + profile = { + "api_key": str(item.get("api_key") or ""), + "base_url": str(item.get("base_url") or ""), + "model": str(item.get("model") or ""), + } + model_pool.append( + { + "id": str(item.get("id") or ""), + "name": str(item.get("name") or ""), + "base_url": profile["base_url"], + "model": profile["model"], + "configured": self._profile_configured(profile), + } + ) + return { + "data": { + "configured": self.configured, + "ifind": self.ifind.status(), + "background_refresh_enabled": bool( + self._system_credentials.get("background_refresh_enabled", True) + ), + **self.database.status(), + "jobs": self.jobs.repository.recent(12), + }, + "llm": { + "primary_configured": self._profile_configured(platform["primary"]), + "fallback_configured": self._profile_configured(platform["fallback"]), + "models": model_pool, + "primary_model_id": str(self._system_credentials.get("primary_model_id") or ""), + "fallback_model_id": str(self._system_credentials.get("fallback_model_id") or ""), + }, + "membership": { + "member_daily_limit": max( + 1, int(self._system_credentials.get("member_daily_limit") or 50) + ) + }, + } + + def save_system_settings(self, payload: dict[str, Any]) -> dict[str, Any]: + current = dict(self._system_credentials) + token = str(payload.get("tushare_token") or current.get("tushare_token") or "").strip() + if token and not TOKEN_PATTERN.fullmatch(token): + raise ValueError("Tushare Token 格式不正确。") + ifind_refresh_token = str( + payload.get("ifind_refresh_token") + or current.get("ifind_refresh_token") + or "" + ).strip() + if ifind_refresh_token and ( + len(ifind_refresh_token) > 2048 + or any(character.isspace() for character in ifind_refresh_token) + ): + raise ValueError("iFinD Refresh Token 格式不正确。") + existing_models = { + str(item.get("id") or ""): item + for item in current.get("llm_models") or [] + if isinstance(item, dict) and item.get("id") + } + raw_models = payload.get("models") + models: list[dict[str, str]] = [] + if raw_models is not None: + if not isinstance(raw_models, list) or len(raw_models) > 20: + raise ValueError("模型池格式不正确,最多可保存 20 个模型。") + seen_ids: set[str] = set() + seen_names: set[str] = set() + for index, raw in enumerate(raw_models, start=1): + if not isinstance(raw, dict): + raise ValueError("模型池条目格式不正确。") + model_id = str(raw.get("id") or f"model-{secrets.token_hex(6)}").strip() + if not re.fullmatch(r"[A-Za-z0-9_-]{3,80}", model_id) or model_id in seen_ids: + raise ValueError("模型 ID 不正确或重复。") + name = validate_text(raw.get("name"), f"模型 {index} 名称", 50, required=True) + normalized_name = name.casefold() + if normalized_name in seen_names: + raise ValueError("模型名称不能重复。") + profile = self._validate_llm_profile( + raw, + existing_models.get(model_id) or {}, + required=True, + label=name, + ) + models.append({"id": model_id, "name": name, **profile}) + seen_ids.add(model_id) + seen_names.add(normalized_name) + else: + models = [dict(item) for item in existing_models.values()] + model_ids = {item["id"] for item in models} + primary_model_id = str( + payload.get("primary_model_id", current.get("primary_model_id") or "") or "" + ).strip() + fallback_model_id = str( + payload.get("fallback_model_id", current.get("fallback_model_id") or "") or "" + ).strip() + if models and primary_model_id not in model_ids: + raise ValueError("请从模型池选择主模型。") + if not models: + primary_model_id = "" + fallback_model_id = "" + if fallback_model_id and fallback_model_id not in model_ids: + raise ValueError("辅助模型不在模型池中。") + if fallback_model_id and fallback_model_id == primary_model_id: + raise ValueError("主模型与辅助模型不能相同。") + try: + daily_limit = max( + 1, + min( + 1000, + int(payload.get("member_daily_limit", current.get("member_daily_limit") or 50)), + ), + ) + except (TypeError, ValueError) as exc: + raise ValueError("会员每日额度应为 1 至 1000。") from exc + current.update( + { + "tushare_token": token, + "ifind_refresh_token": ifind_refresh_token, + "llm_models": models, + "primary_model_id": primary_model_id, + "fallback_model_id": fallback_model_id, + "member_daily_limit": daily_limit, + "background_refresh_enabled": bool( + payload.get( + "background_refresh_enabled", + current.get("background_refresh_enabled", True), + ) + ), + } + ) + self._save_system_credentials(current) + return self.system_status() + + def status(self) -> dict[str, Any]: + llm_access = self.llm_access_status() + return { + "configured": self.configured, + "mode": "tushare" if self.configured else "unavailable", + "llm_configured": self.llm_configured, + "llm_model": self.llm_primary_model if self.llm_configured else "", + "llm_fallback_configured": self.llm_fallback_configured, + "llm_fallback_model": self.llm_fallback_model if self.llm_fallback_configured else "", + "llm_access": llm_access, + "birth_profile_configured": bool(self.stored_birth_profile()), + "birth_profile": self.stored_birth_profile(), + **self.database.status(), + } diff --git a/backend/features/themes/routes.py b/backend/features/themes/routes.py new file mode 100644 index 0000000..5f6cedd --- /dev/null +++ b/backend/features/themes/routes.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from datetime import date +from http import HTTPStatus +from urllib.parse import parse_qs +from backend.data.providers.tushare_client import TushareError + + +class ThemeRoutesMixin: + def _handle_themes_get(self, parsed) -> bool: + if parsed.path == "/api/themes": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.theme_library( + query.get("trade_date", [date.today().isoformat()])[0], + query.get("force", ["0"])[0] == "1", + ) + ) + except (ValueError, TushareError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + if parsed.path == "/api/themes/detail": + query = parse_qs(parsed.query) + try: + self.send_json( + self.application_service.theme_detail( + query.get("code", [""])[0], + query.get("trade_date", [date.today().isoformat()])[0], + ) + ) + except (ValueError, TushareError) as exc: + self.send_json({"error": str(exc)}, HTTPStatus.BAD_REQUEST) + return True + return False diff --git a/backend/http/dispatch.py b/backend/http/dispatch.py new file mode 100644 index 0000000..3b58526 --- /dev/null +++ b/backend/http/dispatch.py @@ -0,0 +1,115 @@ +from __future__ import annotations + +from http import HTTPStatus +from urllib.parse import urlparse + + +PUBLIC_POST_HANDLERS = { + "/api/auth/register": "auth_register", + "/api/auth/login": "auth_login", +} + +AUTHENTICATED_POST_HANDLERS = { + "/api/auth/logout": "auth_logout", + "/api/account/birth-profile": "save_birth_profile", + "/api/account/password": "change_password", + "/api/alerts": "save_alert", + "/api/trades": "save_trade_entry", + "/api/assistant/chat": "stream_assistant_chat", + "/api/admin/settings": "save_system_settings", + "/api/admin/settings/test": "test_system_llm_settings", + "/api/admin/membership": "save_membership", + "/api/admin/refresh": "start_background_refresh", + "/api/watchlist": "save_watchlist", + "/api/notes": "save_note", + "/api/reasons": "save_reason", + "/api/seat-aliases": "save_seat_alias", + "/api/heaven/sector-phases": "save_sector_phase_override", + "/api/backfill": "backfill_data", + "/api/screener/sync": "sync_screener_data", + "/api/screener/compile": "compile_screener_strategy", + "/api/screener/strategies": "save_screener_strategy", + "/api/screener/run": "run_screener", + "/api/screener/tracking/refresh": "refresh_screener_tracking", + "/api/mentors/chat": "stream_mentor_chat", + "/api/heaven/hexagram": "heaven_hexagram", + "/api/heaven/personal": "heaven_personal", + "/api/heaven/interpret": "heaven_interpret", +} + + +class ApplicationHttpDispatchMixin: + def _dispatch_named_handler(self, path: str, handlers: dict[str, str]) -> bool: + handler_name = handlers.get(path) + if handler_name is None: + return False + getattr(self, handler_name)() + return True + + def do_GET(self) -> None: + parsed = urlparse(self.path) + if self._handle_system_public_get(parsed): + return + if self._handle_accounts_public_get(parsed): + return + if parsed.path.startswith("/api/"): + if not self.require_auth(): + return + if not self.require_access("GET", parsed.path): + return + for handler in ( + self._handle_system_get, + self._handle_accounts_get, + self._handle_alerts_get, + self._handle_review_get, + self._handle_market_get, + self._handle_auction_get, + self._handle_themes_get, + self._handle_popularity_get, + self._handle_sentiment_get, + self._handle_rotation_get, + self._handle_dragon_tiger_get, + self._handle_screener_get, + self._handle_mentor_get, + self._handle_heaven_get, + ): + if handler(parsed): + return + self.serve_static(parsed.path) + + def do_POST(self) -> None: + parsed = urlparse(self.path) + if self._dispatch_named_handler(parsed.path, PUBLIC_POST_HANDLERS): + return + if not self.require_auth() or not self.require_csrf(): + return + if not self.require_access("POST", parsed.path): + return + if self._dispatch_named_handler(parsed.path, AUTHENTICATED_POST_HANDLERS): + return + for handler in ( + self._handle_alerts_post, + self._handle_screener_post, + self._handle_mentor_post, + ): + if handler(parsed): + return + self.send_json({"error": "Not found"}, HTTPStatus.NOT_FOUND) + + def do_DELETE(self) -> None: + parsed = urlparse(self.path) + if not self.require_auth() or not self.require_csrf(): + return + if not self.require_access("DELETE", parsed.path): + return + for handler in ( + self._handle_accounts_delete, + self._handle_review_delete, + self._handle_mentor_delete, + self._handle_screener_delete, + self._handle_alerts_delete, + self._handle_heaven_delete, + ): + if handler(parsed): + return + self.send_json({"error": "Not found"}, HTTPStatus.NOT_FOUND) diff --git a/backend/jobs/service.py b/backend/jobs/service.py new file mode 100644 index 0000000..35bc31e --- /dev/null +++ b/backend/jobs/service.py @@ -0,0 +1,49 @@ +from __future__ import annotations + +import threading +import time +from datetime import date + +from backend.bootstrap.config import normalize_date + + +class JobServiceMixin: + def start_background_jobs(self) -> threading.Thread: + return self.jobs.start_scheduler( + self._background_refresh_tick, + interval_seconds=5, + initial_delay_seconds=3, + ) + + def stop_background_jobs(self, timeout_seconds: float = 5) -> bool: + scheduler_stopped = self.jobs.stop_scheduler(timeout_seconds) + workers_stopped = self.jobs.wait_for_idle(timeout_seconds) + return scheduler_stopped and workers_stopped + + def request_background_sync(self, trade_date: str) -> bool: + normalized = normalize_date(trade_date) + key = f"manual:{normalized}:{time.time_ns()}" + return self.jobs.submit( + "market.refresh", + key, + lambda: self.sync_dashboard(normalized), + {"trade_date": normalized, "trigger": "administrator"}, + ) + + def _background_refresh_tick(self) -> None: + if not ( + self.configured + and self._system_credentials.get("background_refresh_enabled", True) + ): + return + today = date.today().strftime("%Y%m%d") + snapshot = self.database.get_snapshot(today) or {} + if self._realtime_snapshot_due(today, snapshot): + bucket = int(time.time() // 5) + self.jobs.submit( + "market.refresh", + f"realtime:{today}:{bucket}", + lambda: self.sync_dashboard(today), + {"trade_date": today, "trigger": "realtime-poll"}, + ) + self._schedule_automatic_screeners(today, snapshot) diff --git a/chart_data_provider.py b/chart_data_provider.py deleted file mode 100644 index f07b035..0000000 --- a/chart_data_provider.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Compatibility alias for the canonical market chart clients.""" - -import sys - -from backend.features.market import charts as _implementation - -sys.modules[__name__] = _implementation diff --git a/config/README.md b/config/README.md index f27497a..5b352f6 100644 --- a/config/README.md +++ b/config/README.md @@ -1,6 +1,6 @@ # Governance Registries -These registries describe the approved product surface of the modular preservation candidate. +These registries describe the approved product surface of the standalone application. - `pages.config.json`: primary page identity, navigation group, access expectation, scrolling, and mobile composition policy. @@ -8,7 +8,7 @@ These registries describe the approved product surface of the modular preservati - `api.config.json`: current routes generated from the preserved `server.py` API surface, with one feature owner and backend access class per route. Its dispatcher implementation lives in `backend/application.py`. -- `architecture-inventory.json`: generated inventory of candidate pages, routes, tables, +- `architecture-inventory.json`: generated inventory of current pages, routes, tables, providers, model entry points, CSS layers, and remaining code hotspots. - `data-fields.config.json`: canonical data products, provider eligibility, intended use, and known blocked datasets. diff --git a/config/architecture-inventory.json b/config/architecture-inventory.json index 70444c7..dfebedc 100644 --- a/config/architecture-inventory.json +++ b/config/architecture-inventory.json @@ -13,7 +13,8 @@ "api_exact_paths": 53, "api_prefixes": 0, "api_patterns": 11, - "database_tables": 36 + "database_tables": 36, + "frontend_page_fragments": 12 }, "pages": [ { @@ -197,7 +198,7 @@ { "provider": "tushare", "path": "backend/data/providers/tushare_client.py", - "runtime_role": "primary deterministic market data" + "runtime_role": "stable client facade for primary deterministic market data" }, { "provider": "ifind", @@ -220,6 +221,53 @@ "runtime_role": "index observation fallback" } ], + "provider_domains": [ + { + "provider": "tushare", + "path": "backend/data/providers/tushare_transport.py", + "responsibility": "HTTP transport and provider errors" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_dashboard.py", + "responsibility": "market overview and realtime breadth" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_indices.py", + "responsibility": "market indices" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_industries.py", + "responsibility": "Shenwan membership and industry snapshots" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_sectors.py", + "responsibility": "generic sector snapshots" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_dragon_tiger.py", + "responsibility": "hot-money directory and dragon-tiger activity" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_stocks.py", + "responsibility": "stock detail and intraday bars" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_daily.py", + "responsibility": "trading calendar, daily bars, and limit lists" + }, + { + "provider": "tushare", + "path": "backend/data/providers/tushare_helpers.py", + "responsibility": "shared deterministic normalization helpers" + } + ], "provider_construction": [ { "client": "TushareClient", @@ -239,6 +287,30 @@ "owner": "backend/data/gateway.py" } ], + "heaven_service_owners": { + "facade": "backend/features/heaven/service.py", + "manual_validation_and_safety": "backend/features/heaven/manual.py", + "trend_orchestration_and_quality": "backend/features/heaven/trend.py", + "market_context": "backend/features/heaven/market_context.py", + "readings_and_interpretation": "backend/features/heaven/readings.py" + }, + "market_insight_owners": { + "facade": "backend/features/market/insights.py", + "shared_context": "backend/features/market/insights_context.py", + "auction_scoring": "backend/features/market/insights_auction_scoring.py", + "auction_data": "backend/features/market/insights_auction_data.py", + "auction_orchestration": "backend/features/market/insights_auction.py", + "themes": "backend/features/market/insights_themes.py", + "popularity": "backend/features/market/insights_popularity.py" + }, + "application_owners": { + "composition_root": "backend/application.py", + "http_dispatch": "backend/http/dispatch.py", + "system_service": "backend/features/system/service.py", + "account_bridge": "backend/features/accounts/application.py", + "job_lifecycle": "backend/jobs/service.py", + "feature_routes": "backend/features/*/routes.py" + }, "numeric_normalization": [ { "function": "finite_number", @@ -299,73 +371,83 @@ ], "css_layers": [ "/shared/tokens.css?v=20260729-1", - "/styles/styles.css", - "/styles/renovation.css?v=20260725-5", - "/styles/redesign-v2.css?v=20260728-1", - "/styles/design-system.css?v=20260728-4", - "/styles/theme.css?v=20260728-2", - "/pages/heaven/page.css?v=20260728-7" + "/shared/base.css?v=20260802-5", + "/shared/shell.css?v=20260802-5", + "/shared/auth.css?v=20260802-5", + "/shared/components/controls.css?v=20260802-5", + "/shared/components/navigation.css?v=20260802-5", + "/shared/components/cards.css?v=20260802-5", + "/shared/components/tables.css?v=20260802-5", + "/shared/components/dialogs.css?v=20260802-5", + "/shared/components/feedback.css?v=20260802-5", + "/pages/market/foundation.css?v=20260802-5", + "/pages/sentiment/foundation.css?v=20260802-5", + "/pages/pools/foundation.css?v=20260802-5", + "/pages/ladder/foundation.css?v=20260802-5", + "/pages/rotation/foundation.css?v=20260802-5", + "/pages/auction/foundation.css?v=20260802-5", + "/pages/themes/foundation.css?v=20260802-5", + "/pages/popularity/foundation.css?v=20260802-5", + "/pages/dragon-tiger/foundation.css?v=20260802-5", + "/pages/screener/foundation.css?v=20260802-5", + "/pages/mentor/foundation.css?v=20260802-5", + "/pages/heaven/foundation.css?v=20260802-5", + "/pages/review/foundation.css?v=20260802-5" ], + "frontend_composition": { + "shell": "frontend/index.html", + "bootstrap": "frontend/bootstrap.js", + "registry": "frontend/pages.config.js", + "startup": "frontend/app.js", + "runtime_owners": { + "context": "frontend/shared/context.js", + "application": "frontend/shared/application.js", + "feedback": "frontend/shared/feedback.js", + "dashboard": "frontend/shared/dashboard.js", + "session": "frontend/shared/session.js", + "admin": "frontend/shared/admin.js", + "theme": "frontend/shared/theme.js", + "table": "frontend/shared/table.js" + }, + "market_runtime_owners": { + "breadth": "frontend/pages/market/breadth.js", + "charts": "frontend/pages/market/charts.js", + "entity_detail": "frontend/pages/market/entity-detail.js", + "stock_detail": "frontend/pages/market/stock-detail.js", + "preview": "frontend/pages/market/preview.js", + "search": "frontend/pages/market/search.js", + "bindings": "frontend/pages/market/bindings.js" + }, + "fragments": [ + "/pages/pools/page.html", + "/pages/sentiment/page.html", + "/pages/heaven/page.html", + "/pages/ladder/page.html", + "/pages/screener/page.html", + "/pages/mentor/page.html", + "/pages/rotation/page.html", + "/pages/auction/page.html", + "/pages/themes/page.html", + "/pages/popularity/page.html", + "/pages/dragon-tiger/page.html", + "/pages/review/page.html" + ] + }, "code_hotspots": [ { - "path": "frontend/styles/styles.css", - "bytes": 359673, - "lines": 15360 + "path": "frontend/pages/heaven/foundation.css", + "bytes": 183624, + "lines": 11655 }, { - "path": "frontend/styles/redesign-v2.css", - "bytes": 262013, - "lines": 8531 - }, - { - "path": "frontend/index.html", - "bytes": 135019, - "lines": 1892 - }, - { - "path": "backend/features/screener/engine.py", - "bytes": 108387, - "lines": 2203 - }, - { - "path": "backend/data/providers/tushare_client.py", - "bytes": 94124, - "lines": 2165 - }, - { - "path": "frontend/app.js", - "bytes": 89213, - "lines": 1939 + "path": "frontend/pages/screener/foundation.css", + "bytes": 100200, + "lines": 6433 }, { "path": "frontend/pages/heaven/page.js", - "bytes": 86493, - "lines": 1830 - }, - { - "path": "frontend/styles/renovation.css", - "bytes": 81205, - "lines": 1480 - }, - { - "path": "frontend/pages/heaven/page.css", - "bytes": 73222, - "lines": 1084 - }, - { - "path": "backend/features/heaven/service.py", - "bytes": 63138, - "lines": 1304 - }, - { - "path": "backend/features/market/insights.py", - "bytes": 57998, - "lines": 1307 - }, - { - "path": "frontend/pages/market/runtime.js", - "bytes": 55720, - "lines": 1333 + "bytes": 92669, + "lines": 1965 }, { "path": "backend/features/heaven/engine.py", @@ -373,19 +455,429 @@ "lines": 1181 }, { - "path": "backend/application.py", - "bytes": 47769, - "lines": 1092 + "path": "frontend/index.html", + "bytes": 44688, + "lines": 632 }, { - "path": "frontend/styles/theme.css", - "bytes": 36427, - "lines": 1253 + "path": "frontend/shared/shell.css", + "bytes": 40260, + "lines": 2800 + }, + { + "path": "backend/features/screener/catalog.py", + "bytes": 35424, + "lines": 707 + }, + { + "path": "frontend/pages/auction/foundation.css", + "bytes": 32818, + "lines": 2305 }, { "path": "database.py", "bytes": 32073, "lines": 716 + }, + { + "path": "backend/features/screener/factors.py", + "bytes": 31756, + "lines": 562 + }, + { + "path": "backend/data/providers/tushare_dashboard.py", + "bytes": 28051, + "lines": 644 + }, + { + "path": "backend/data/providers/tushare_industries.py", + "bytes": 26540, + "lines": 616 + }, + { + "path": "backend/features/heaven/manual.py", + "bytes": 24521, + "lines": 412 + }, + { + "path": "frontend/pages/heaven/page.html", + "bytes": 19103, + "lines": 255 + }, + { + "path": "frontend/pages/screener/page.html", + "bytes": 18513, + "lines": 219 + }, + { + "path": "frontend/pages/market/preview.js", + "bytes": 18178, + "lines": 446 + }, + { + "path": "backend/features/market/insights_auction_scoring.py", + "bytes": 16689, + "lines": 355 + }, + { + "path": "backend/features/heaven/trend.py", + "bytes": 16310, + "lines": 358 + }, + { + "path": "frontend/pages/market/charts.js", + "bytes": 15311, + "lines": 387 + }, + { + "path": "frontend/pages/pools/page.html", + "bytes": 14958, + "lines": 235 + }, + { + "path": "backend/features/screener/data_sync.py", + "bytes": 14743, + "lines": 342 + }, + { + "path": "frontend/shared/admin.js", + "bytes": 13975, + "lines": 256 + }, + { + "path": "backend/features/heaven/market_context.py", + "bytes": 13681, + "lines": 338 + }, + { + "path": "frontend/shared/session.js", + "bytes": 12842, + "lines": 285 + }, + { + "path": "backend/features/market/insights_auction_data.py", + "bytes": 12829, + "lines": 318 + }, + { + "path": "backend/features/system/service.py", + "bytes": 12392, + "lines": 254 + }, + { + "path": "backend/features/market/insights_auction.py", + "bytes": 10717, + "lines": 221 + }, + { + "path": "backend/data/providers/tushare_sectors.py", + "bytes": 9876, + "lines": 224 + }, + { + "path": "backend/features/market/insights_themes.py", + "bytes": 9348, + "lines": 222 + }, + { + "path": "backend/features/heaven/readings.py", + "bytes": 9313, + "lines": 220 + }, + { + "path": "frontend/pages/market/entity-detail.js", + "bytes": 9119, + "lines": 199 + }, + { + "path": "backend/data/providers/tushare_dragon_tiger.py", + "bytes": 9059, + "lines": 214 + }, + { + "path": "backend/features/screener/indicators.py", + "bytes": 8562, + "lines": 238 + }, + { + "path": "frontend/shared/dashboard.js", + "bytes": 8424, + "lines": 194 + }, + { + "path": "backend/features/screener/formula.py", + "bytes": 6983, + "lines": 146 + }, + { + "path": "backend/data/providers/tushare_daily.py", + "bytes": 6837, + "lines": 160 + }, + { + "path": "backend/application.py", + "bytes": 6751, + "lines": 178 + }, + { + "path": "backend/features/market/insights_popularity.py", + "bytes": 6739, + "lines": 156 + }, + { + "path": "frontend/pages/sentiment/page.html", + "bytes": 6488, + "lines": 81 + }, + { + "path": "frontend/shared/context.js", + "bytes": 6433, + "lines": 216 + }, + { + "path": "backend/data/providers/tushare_stocks.py", + "bytes": 6244, + "lines": 137 + }, + { + "path": "backend/features/screener/backtest.py", + "bytes": 6202, + "lines": 141 + }, + { + "path": "backend/features/screener/selection.py", + "bytes": 6092, + "lines": 138 + }, + { + "path": "frontend/pages/dragon-tiger/page.html", + "bytes": 5754, + "lines": 85 + }, + { + "path": "frontend/pages/market/stock-detail.js", + "bytes": 5690, + "lines": 124 + }, + { + "path": "frontend/pages/mentor/page.html", + "bytes": 5501, + "lines": 72 + }, + { + "path": "backend/data/providers/tushare_indices.py", + "bytes": 5451, + "lines": 118 + }, + { + "path": "frontend/pages/market/search.js", + "bytes": 5384, + "lines": 131 + }, + { + "path": "frontend/pages.config.js", + "bytes": 5380, + "lines": 130 + }, + { + "path": "frontend/pages/auction/page.html", + "bytes": 5350, + "lines": 74 + }, + { + "path": "frontend/shared/feedback.js", + "bytes": 5157, + "lines": 153 + }, + { + "path": "frontend/pages/review/page.html", + "bytes": 4753, + "lines": 57 + }, + { + "path": "backend/features/screener/routes.py", + "bytes": 4712, + "lines": 106 + }, + { + "path": "backend/features/market/routes.py", + "bytes": 4276, + "lines": 91 + }, + { + "path": "backend/features/screener/engine.py", + "bytes": 4242, + "lines": 129 + }, + { + "path": "backend/http/dispatch.py", + "bytes": 4118, + "lines": 115 + }, + { + "path": "frontend/shared/theme.js", + "bytes": 4118, + "lines": 115 + }, + { + "path": "frontend/shared/table.js", + "bytes": 3790, + "lines": 81 + }, + { + "path": "backend/features/heaven/routes.py", + "bytes": 3475, + "lines": 79 + }, + { + "path": "backend/features/review/routes.py", + "bytes": 3369, + "lines": 81 + }, + { + "path": "frontend/pages/themes/page.html", + "bytes": 3309, + "lines": 55 + }, + { + "path": "frontend/app.js", + "bytes": 3201, + "lines": 93 + }, + { + "path": "backend/features/market/insights_context.py", + "bytes": 3175, + "lines": 84 + }, + { + "path": "frontend/pages/rotation/page.html", + "bytes": 3031, + "lines": 54 + }, + { + "path": "frontend/pages/market/bindings.js", + "bytes": 2663, + "lines": 40 + }, + { + "path": "backend/features/accounts/application.py", + "bytes": 2442, + "lines": 63 + }, + { + "path": "backend/features/mentor/routes.py", + "bytes": 2299, + "lines": 57 + }, + { + "path": "backend/features/screener/regime.py", + "bytes": 2202, + "lines": 53 + }, + { + "path": "backend/data/providers/tushare_client.py", + "bytes": 2166, + "lines": 68 + }, + { + "path": "frontend/pages/popularity/page.html", + "bytes": 2165, + "lines": 35 + }, + { + "path": "backend/data/providers/tushare_helpers.py", + "bytes": 2083, + "lines": 64 + }, + { + "path": "frontend/pages/market/breadth.js", + "bytes": 2071, + "lines": 41 + }, + { + "path": "backend/features/dragon_tiger/routes.py", + "bytes": 1919, + "lines": 45 + }, + { + "path": "backend/jobs/service.py", + "bytes": 1746, + "lines": 49 + }, + { + "path": "backend/features/alerts/routes.py", + "bytes": 1687, + "lines": 47 + }, + { + "path": "frontend/shared/application.js", + "bytes": 1642, + "lines": 53 + }, + { + "path": "backend/features/market/insights.py", + "bytes": 1580, + "lines": 45 + }, + { + "path": "frontend/bootstrap.js", + "bytes": 1535, + "lines": 39 + }, + { + "path": "backend/data/providers/tushare_transport.py", + "bytes": 1455, + "lines": 48 + }, + { + "path": "backend/features/system/routes.py", + "bytes": 1423, + "lines": 40 + }, + { + "path": "backend/features/themes/routes.py", + "bytes": 1337, + "lines": 35 + }, + { + "path": "backend/features/rotation/routes.py", + "bytes": 1195, + "lines": 30 + }, + { + "path": "frontend/pages/ladder/page.html", + "bytes": 1143, + "lines": 19 + }, + { + "path": "backend/features/popularity/routes.py", + "bytes": 822, + "lines": 23 + }, + { + "path": "backend/features/auction/routes.py", + "bytes": 817, + "lines": 23 + }, + { + "path": "backend/features/accounts/routes.py", + "bytes": 803, + "lines": 22 + }, + { + "path": "backend/features/sentiment/routes.py", + "bytes": 724, + "lines": 19 + }, + { + "path": "backend/features/pools/routes.py", + "bytes": 568, + "lines": 18 + }, + { + "path": "backend/features/heaven/service.py", + "bytes": 435, + "lines": 15 } ] } diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..f0bf340 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,9 @@ +# 文档索引 + +- `product/小白复盘-完整产品规格说明书.md`:从零恢复产品时的完整功能与行为资产。 +- `maintenance/人工维护指南.md`:当前正式源码的启动、修改、验收、数据和回退流程。 +- `governance/`:架构决策、注册表治理和历次结构治理记录。 +- `migration/`:从旧根目录保真迁入`app/`的历史账本、证据和失败版本记录。 + +日常维护优先阅读根目录`AGENTS.md`、`ARCHITECTURE.md`和维护指南。`migration/`只用于审计与 +追溯,不参与应用启动、测试选择或运行时路径解析。 diff --git a/docs/governance/adr/0001-modular-monolith.md b/docs/governance/adr/0001-modular-monolith.md new file mode 100644 index 0000000..1f89693 --- /dev/null +++ b/docs/governance/adr/0001-modular-monolith.md @@ -0,0 +1,75 @@ +# ADR 0001: Govern as a Modular Monolith + +Status: Accepted + +Date: 2026-07-29 + +## Context + +The application is deployed on a LAN NAS as one Docker container with a Python HTTP process, +SQLite, a build-free browser client, scheduled refresh work, external market providers, and +LLM features. Product breadth has grown, while routing, persistence, frontend state, and CSS +remain concentrated in a few large files. + +The system may later become internet-facing, gain more features, replace SQLite, or move jobs +to workers. It does not currently have load or team boundaries that justify distributed +services. + +## Decision + +Retain one deployable application and introduce strict internal modules, ports, adapters, +feature registries, data contracts, repository contracts, and regression gates. + +The deployment remains: + +```text +one image + one application process + one persistent data volume + port 8765 +``` + +Internal code moves toward: + +```text +delivery -> application services -> ports -> infrastructure +``` + +Compatibility facades permit incremental migration. No feature is rewritten solely to match +the target directory structure. + +## Consequences + +### Positive + +- Current NAS deployment stays simple. +- Refactoring can proceed in reversible stages. +- Feature ownership and account boundaries become visible. +- Data, database, LLM, and job adapters can be replaced later. +- A measured hotspot can be extracted without first untangling business logic. + +### Costs + +- The transition temporarily contains old and new entrypoints. +- Boundary tests and registries require ongoing maintenance. +- A single process remains a capacity and fault-isolation limit until infrastructure is + deliberately extracted. + +## Rejected Alternatives + +### Immediate microservices + +Rejected because they add network contracts, service discovery, deployment coordination, +distributed tracing, and failure modes before load requires them. + +### Full framework rewrite + +Rejected because replacing the HTTP and frontend frameworks while moving boundaries would +combine structural and behavioral risk. + +### Continue patching flat modules + +Rejected because current file size, direct provider creation, global page state, and CSS +override layers already make regressions difficult to isolate. + +## Revisit Conditions + +Reconsider service extraction when one module has independently measured scaling needs, +requires a separate availability boundary, or needs an independent release lifecycle. diff --git a/docs/governance/architecture-inventory.json b/docs/governance/architecture-inventory.json new file mode 100644 index 0000000..fd68534 --- /dev/null +++ b/docs/governance/architecture-inventory.json @@ -0,0 +1,317 @@ +{ + "schema_version": 1, + "captured_from": "governed source tree", + "runtime": { + "http_server": "http.server.ThreadingHTTPServer", + "application_processes": 1, + "database": "SQLite WAL", + "frontend": "build-free HTML/CSS/JavaScript", + "container_port": 8765 + }, + "counts": { + "primary_pages": 16, + "api_exact_paths": 53, + "api_prefixes": 0, + "api_patterns": 11, + "database_tables": 34 + }, + "pages": [ + { + "id": "sentimentCycleView", + "title": "情绪周期" + }, + { + "id": "limitPool", + "title": "涨停池" + }, + { + "id": "brokenView", + "title": "炸板池" + }, + { + "id": "downView", + "title": "跌停板" + }, + { + "id": "yesterdayView", + "title": "昨日涨停" + }, + { + "id": "performanceView", + "title": "涨停表现" + }, + { + "id": "ladderView", + "title": "市场天梯" + }, + { + "id": "rotationView", + "title": "板块轮动" + }, + { + "id": "auctionView", + "title": "集合竞价" + }, + { + "id": "themeLibraryView", + "title": "题材库" + }, + { + "id": "popularityView", + "title": "人气热榜" + }, + { + "id": "dragonView", + "title": "龙虎榜" + }, + { + "id": "screenerView", + "title": "智能选股" + }, + { + "id": "mentorView", + "title": "问师" + }, + { + "id": "heavenView", + "title": "问天" + }, + { + "id": "reviewWorkspaceView", + "title": "我的复盘" + } + ], + "api": { + "exact": [ + "/api/account/birth-profile", + "/api/account/password", + "/api/account/status", + "/api/admin/membership", + "/api/admin/refresh", + "/api/admin/settings", + "/api/admin/settings/test", + "/api/alerts", + "/api/alerts/read-all", + "/api/assistant/chat", + "/api/assistant/messages", + "/api/auction", + "/api/auth/login", + "/api/auth/logout", + "/api/auth/me", + "/api/auth/register", + "/api/backfill", + "/api/chart/intraday", + "/api/dashboard", + "/api/dragon-tiger", + "/api/dragon-tiger/profiles", + "/api/health", + "/api/heaven/hexagram", + "/api/heaven/interpret", + "/api/heaven/personal", + "/api/heaven/readings", + "/api/heaven/sector-phases", + "/api/heaven/setup", + "/api/mentors/chat", + "/api/mentors/messages", + "/api/mentors/preferences", + "/api/mentors/setup", + "/api/notes", + "/api/popularity", + "/api/realtime-aggregate/health", + "/api/reasons", + "/api/rotation/history", + "/api/rotation/members", + "/api/screener/compile", + "/api/screener/run", + "/api/screener/setup", + "/api/screener/strategies", + "/api/screener/sync", + "/api/screener/tracking", + "/api/screener/tracking/refresh", + "/api/search", + "/api/search/detail", + "/api/seat-aliases", + "/api/sentiment/history", + "/api/themes", + "/api/themes/detail", + "/api/trades", + "/api/watchlist" + ], + "prefixes": [], + "patterns": [ + "/api/alerts/(\\d+)", + "/api/alerts/(\\d+)/read", + "/api/heaven/readings/(\\d+)", + "/api/heaven/sector-phases/(.+)", + "/api/notes/(\\d+)", + "/api/screener/strategies/(\\d+)", + "/api/screener/tracking/(\\d+)", + "/api/stock/(\\d{6})", + "/api/stock/(\\d{6})/preview", + "/api/trades/(\\d+)", + "/api/watchlist/(\\d{6})" + ] + }, + "database_tables": [ + "users", + "user_sessions", + "user_credentials", + "user_birth_profiles", + "system_settings", + "llm_usage", + "dashboard_snapshots", + "sync_runs", + "data_snapshots", + "watchlist", + "review_notes", + "reason_overrides", + "seat_aliases", + "sector_phase_overrides", + "stock_master", + "daily_bars", + "benchmark_bars", + "daily_indicators", + "fundamental_indicators", + "moneyflow_daily", + "auction_factors", + "earnings_events", + "popularity_factors", + "lhb_institution_daily", + "screener_strategies", + "screener_runs", + "mentor_messages", + "mentor_preferences", + "wencai_saved_queries", + "strategy_tracks", + "alerts", + "trade_entries", + "assistant_messages", + "heaven_readings" + ], + "background_job_methods": [ + "_background_refresh_tick", + "_schedule_automatic_screeners", + "_schedule_ifind_event_enrichment", + "run_automatic_screeners" + ], + "external_data_adapters": [ + { + "provider": "tushare", + "path": "tushare_client.py", + "runtime_role": "primary deterministic market data" + }, + { + "provider": "ifind", + "path": "ifind_client.py", + "runtime_role": "realtime, charts, snapshots, enrichment" + }, + { + "provider": "eastmoney", + "path": "chart_data_provider.py", + "runtime_role": "display chart fallback" + }, + { + "provider": "eastmoney", + "path": "realtime_aggregator.py", + "runtime_role": "isolated realtime observation" + }, + { + "provider": "tencent", + "path": "realtime_aggregator.py", + "runtime_role": "index observation fallback" + } + ], + "llm_entrypoints": [ + { + "function": "stream_with_mentor", + "path": "mentor_agent.py" + }, + { + "function": "interpret_heaven", + "path": "heaven_agent.py" + }, + { + "function": "stream_review_assistant", + "path": "assistant_agent.py" + }, + { + "function": "compile_strategy_with_llm", + "path": "llm_strategy.py" + }, + { + "function": "test_llm_connection", + "path": "llm_strategy.py" + } + ], + "css_layers": [ + "/shared/tokens.css?v=20260729-1", + "/styles.css", + "/renovation.css?v=20260725-5", + "/redesign-v2.css?v=20260728-1", + "/design-system.css?v=20260728-4", + "/theme.css?v=20260728-2", + "/wentian-v2.css?v=20260728-7" + ], + "code_hotspots": [ + { + "path": "static/app.js", + "bytes": 441313, + "lines": 9283 + }, + { + "path": "static/styles.css", + "bytes": 361780, + "lines": 15465 + }, + { + "path": "server.py", + "bytes": 263744, + "lines": 5856 + }, + { + "path": "static/redesign-v2.css", + "bytes": 263539, + "lines": 8570 + }, + { + "path": "static/index.html", + "bytes": 134831, + "lines": 1890 + }, + { + "path": "database.py", + "bytes": 121546, + "lines": 2839 + }, + { + "path": "screener.py", + "bytes": 108535, + "lines": 2213 + }, + { + "path": "tushare_client.py", + "bytes": 94312, + "lines": 2175 + }, + { + "path": "static/renovation.css", + "bytes": 83949, + "lines": 1553 + }, + { + "path": "static/wentian-v2.css", + "bytes": 73222, + "lines": 1084 + }, + { + "path": "market_insights.py", + "bytes": 58066, + "lines": 1312 + }, + { + "path": "static/theme.css", + "bytes": 36427, + "lines": 1253 + } + ] +} diff --git a/docs/governance/architecture-standard.md b/docs/governance/architecture-standard.md new file mode 100644 index 0000000..64ae1d2 --- /dev/null +++ b/docs/governance/architecture-standard.md @@ -0,0 +1,277 @@ +# Application Architecture Standard + +Status: Accepted + +Date: 2026-07-29 + +## 1. Objective + +The application remains a deployable modular monolith while its internal boundaries are made +explicit. Governance must preserve current functionality, account isolation, visual behavior, +and Docker simplicity. A structural refactor is not permission to change product behavior. + +## 2. Target Topology + +```text +browser + -> frontend shared API client + -> backend HTTP controllers + -> feature application services + -> repositories / DataGateway / LLMGateway + -> SQLite / market providers / model providers + +background jobs + -> the same feature application services + -> the same repositories and gateways +``` + +The browser and jobs are two delivery mechanisms. Neither owns business rules. + +## 3. Target Source Layout + +```text +frontend/ + shared/ + tokens.css + shell.js + api.js + state.js + components/ + pages// + page.js + desktop.css + mobile.css + pages.config.js + +backend/ + bootstrap/ + http/ + router.py + auth.py + errors.py + schemas/ + features// + routes.py + service.py + repository.py + schemas.py + data/ + gateway.py + policy.py + contracts.py + providers/ + database/ + connection.py + migrations/ + repositories/ + jobs/ + llm/ + gateway.py + usage.py + models.py + prompts/ + features_config.py + +tests/ +data/ +server.py +``` + +The migration may use compatibility facades. Old modules are removed only after all callers +move and regression gates pass. + +## 4. Dependency Direction + +Allowed direction: + +```text +HTTP / jobs -> feature services -> ports -> infrastructure adapters +frontend pages -> shared components/state/API -> backend API +``` + +Forbidden dependencies: + +1. Frontend code must not call external market or LLM providers directly. +2. HTTP controllers must not contain scoring, screening, divination, or persistence logic. +3. Feature services must not instantiate Tushare, iFinD, Eastmoney, Tencent, SQLite, or LLM + clients directly. +4. Provider adapters must not import feature services. +5. Repositories must not call external providers. +6. Features must not read another feature's tables directly; cross-feature work goes through + an application service or declared read model. +7. Background jobs must call the same services used by HTTP flows rather than duplicate + calculations. + +## 5. Feature Ownership + +Each feature owns its routes, application service, schemas, repository interface, page module, +tests, and documentation. Initial feature IDs are defined in `features.config.json` during +Stage 04. + +Shared code is allowed only when at least two features use the same stable behavior. A shared +module must not branch on page names or feature IDs to emulate unrelated components. + +## 6. HTTP Contract + +- Public application APIs use `/api/` and UTF-8 JSON. +- Controllers validate transport input, authorize the request, call one application service, + and serialize the result. +- Dates exposed to users use `YYYY-MM-DD`; provider-specific compact dates stay inside + adapters. +- Datetimes include an explicit timezone. Market time is interpreted as Asia/Shanghai. +- Successful collections use `items`; pagination uses `page`, `page_size`, and `total` when + required. +- Errors use a stable `code`, a user-safe `message`, and a request correlation ID. Provider + credentials and raw response bodies never appear in browser errors. +- Existing response shapes remain compatible until a versioned migration is approved. +- Backend authorization is authoritative. Hidden frontend controls are not a security rule. + +## 7. Data Contract + +Every calculation field declares: + +- canonical field ID and Chinese display label; +- entity and frequency; +- type, unit, precision, timezone, and adjustment mode; +- unique primary source and permitted fallback sources; +- display-only or calculation-eligible status; +- freshness and completeness thresholds; +- missing-value behavior; +- point-in-time availability rules; +- owning dataset and persistence location. + +Missing calculation data fails closed. A strategy may not silently replace a required field +with a proxy and continue under the original strategy name. Display fallbacks cannot enter +screening, scoring, backtesting, sentiment, or Wentian calculations unless explicitly approved +for that canonical field. + +One OHLC bar or factor history must not mix providers. Source changes are recorded with the +stored observation and invalidate incompatible cached calculations. + +## 8. Market Provider Policy + +- Tushare is the default deterministic source for master data, calendar, daily bars, + fundamentals, valuations, industry data, lists, and post-close datasets. +- iFinD is the default source for licensed realtime snapshots, intraday data, dynamic auction + observations, charts, and approved event enrichment. +- Eastmoney and Tencent public endpoints are display or observation fallbacks only unless a + field contract explicitly promotes them. +- All provider traffic passes through `DataGateway`; provider classes only translate their own + protocol into canonical contracts. +- Retries, timeouts, quotas, cache TTL, circuit state, and provenance are centralized. + +## 9. Persistence Standard + +- SQLite WAL remains the current deployment database. +- Schema changes use ordered migration files with an immutable version ID. +- A migration is transactional where SQLite permits it and must be safe to run once. +- Destructive migrations require a verified backup and explicit acceptance. +- User-owned tables include `user_id`, a foreign key, an ownership index, and cross-account + tests. +- Repositories return domain-shaped records; controllers never execute SQL. +- Financial and research data preserve announcement timestamps to prevent look-ahead use. +- A future PostgreSQL adapter must satisfy the same repository contracts. + +## 10. Background Jobs + +- Jobs declare an ID, schedule, input date policy, dependencies, lock key, timeout, retry + policy, and idempotency key. +- Job runs persist start, completion, failure code, retry count, source coverage, and output + version. +- A process restart must not duplicate a completed post-close calculation. +- Exceptions are logged and surfaced in system management; they are never silently discarded. +- The current in-process runner may remain, but jobs cannot depend on thread-local request + context. This permits later extraction to a worker without changing business services. + +## 11. LLM Standard + +All model calls pass through `LLMGateway`, which owns: + +- membership authorization and feature availability; +- quota reservation, settlement, and daily limits; +- model-pool selection and fallback; +- timeout, cancellation, retry, and streaming protocol; +- prompt version, model, latency, token usage, and failure audit; +- removal of secrets and engineering details from user-visible errors. + +Skill evidence, source material, and data profiles remain separate from reusable prompt +templates. Deterministic calculations happen before the LLM call and are not delegated to the +model. + +## 12. Frontend Standard + +- `shared/api.js` is the only browser request exit. +- `shared/shell.js` owns sidebar, topbar, market summary, status bar, global dialogs, and page + mounting. +- `pages.config.js` owns navigation metadata and page loading, not authorization truth. +- A page module fetches data, owns page-local state, and composes shared components. +- Global mutable page state and cross-page DOM queries are prohibited after migration. +- Tables use shared shells with page-owned column schemas and formatters. +- Opening, closing, focus management, and feedback for dialogs use one dialog service. + +## 13. CSS and Design Tokens + +The cascade order is fixed: + +```text +tokens -> reset/base -> shell/layout -> shared components -> page styles -> theme overrides +``` + +- Literal colors, font sizes, and spacing are introduced through tokens first. +- Page styles are scoped to the page root and cannot redefine the shell or another page. +- A later file cannot be used indefinitely as a patch layer for an earlier file. +- Shared components have one authoritative definition. +- CSS is removed only after selector/reference scanning, light/dark screenshots, and full + browser regression. + +## 14. Mobile Standard + +Mobile shares tokens, data, permissions, components, and state with desktop, but it may use a +different composition and interaction model. + +- Shared mobile shell rules live in `shared/mobile-shell.css`. +- Each complex page may own `mobile.css` and a mobile view renderer. +- One global all-page `mobile.css` override pile is prohibited. +- Desktop tables may become summary lists and detail views on mobile. +- Mobile acceptance is performed independently at 390x844 and 430x932. +- Mobile changes must not alter approved desktop geometry. + +## 15. Configuration and Secrets + +- Environment variables seed deployment configuration; encrypted system settings hold managed + runtime credentials. +- Tokens, API keys, refresh tokens, model secrets, and encryption keys never enter Git, logs, + API responses, or browser storage. +- Feature flags, page metadata, field contracts, and permissions are versioned configuration, + not ad hoc conditionals. + +## 16. Observability + +External calls record provider, operation, elapsed time, cache result, freshness, normalized +error code, and correlation ID. Logs must not contain secrets or personal birth data. + +Health checks distinguish process health, database health, provider degradation, background +job health, and model availability. Provider degradation does not make the process health +endpoint fail unless the application itself cannot serve stored data. + +## 17. Change and Release Contract + +Every governance phase must: + +1. begin from a clean Git worktree; +2. preserve the Stage 01 baseline contract; +3. include migration or compatibility tests for changed boundaries; +4. pass `python tools/verify_baseline.py`; +5. run Playwright at phase boundaries affecting runtime or frontend behavior; +6. document residual risk; +7. create and push a dedicated rollback commit. + +No phase combines framework replacement, visual redesign, and business-rule changes. + +## 18. Public-Internet Evolution + +The modular monolith remains the default. Reverse proxy/TLS, PostgreSQL, Redis, durable jobs, +central secrets, monitoring, and rate limiting can replace infrastructure adapters later. +Feature services and frontend contracts must not depend on whether those adapters are local or +remote. A feature is extracted into a separate service only when measured load, independent +release needs, or fault isolation justifies the operational cost. diff --git a/docs/governance/code-reduction.md b/docs/governance/code-reduction.md new file mode 100644 index 0000000..ad939d5 --- /dev/null +++ b/docs/governance/code-reduction.md @@ -0,0 +1,401 @@ +# `app/`代码减法账本 + +> 基线:`xiaobai-preservation-complete-20260801` +> 工作目录:只允许修改`webapp/app/`;原版根目录和冻结的`next/`只读 +> 目标:删除重复实现和历史补丁,不改变功能、视觉、交互、动画、计算、权限、API或数据行为 + +## 固定规则 + +1. 每批只处理一个明确边界,先证明重复或无消费者,再修改。 +2. 新共享实现必须在同一提交删除全部被替代实现;禁止只加一层包装。 +3. 运行代码总量原则上不得增加;测试和证据代码单独统计。 +4. 迁移期源码相等测试不得简单删除。发生已批准的结构重构时,必须替换成行为、错误语义和 + 唯一所有权契约。 +5. 每批通过领域测试、全量候选测试、独立导出测试和受影响的浏览器流程后才建立Git检查点。 +6. CSS最后处理;没有逐页日间、夜间和多视口截图证据,不删除视觉规则。 + +## 批次记录 + +| 批次 | 边界 | 基线问题 | 目标 | 状态 | +|---|---|---|---|---| +| CR-01 | LLM供应商传输 | 问师、问天、复盘助手和策略编译各自构造HTTP请求、解析响应和读取错误 | 只保留`backend/llm/transport.py`一个网络出口 | 已完成 | +| CR-02 | HTTP精确POST委托 | 27个端点重复使用“比较路径、调用无参数处理器、返回”三行分支 | 用公开/受保护两张显式映射统一委托,同时保留复杂路由的原控制流 | 已完成 | +| CR-03 | 股票市场后缀转换 | Tushare业务与iFinD图表各保留一份完全相同的沪深京代码转换函数 | 图表复用`bootstrap/config.py::tushare_code`,只保留一份函数体 | 已完成 | +| CR-04 | 数值归一化策略 | 四个业务模块分别保留两组完全相同的数值转换函数体 | 由`backend/data/numbers.py`集中拥有两种既有语义,消费者保留原局部别名 | 已完成 | +| CR-05 | 根级兼容入口 | 正式后端仍有五处通过迁移兼容模块反向导入规范实现 | 正式代码改用规范路径;兼容入口只服务原公开导入契约 | 已完成 | +| CR-06 | 紧凑日期显示 | Tushare与选股引擎各保留一份完全相同的`YYYYMMDD`显示转换 | 由`bootstrap/config.py`拥有唯一格式策略,消费者保留原局部别名 | 已完成 | +| CR-07 | 数据Provider组装 | 核查网关、容器和业务服务是否重复创建外部数据客户端 | 固化唯一创建位置及兼容例外,不改数据源语义 | 已完成 | +| CR-08 | NDJSON流式传输 | 问师与复盘助手重复维护响应头、事件写入、完成、断线及关闭流程 | HTTP共享层拥有唯一流式连接生命周期 | 已完成 | +| CR-09 | 应用服务门面 | 两个仅服务股池iFinD补全的方法仍错位在全局`DashboardService` | 原函数体机械归位到`PoolServiceMixin` | 已完成 | +| CR-10 | Repository所有权 | 五行行业阶段覆盖的三项持久化方法仍错位在根级数据库门面 | 原函数体机械归位到问天Repository,兼容数据继续保留 | 已完成 | +| CR-11 | 后台任务生命周期 | 导入应用即启动调度线程,启动早于端口绑定,停止只置位但不等待 | 运行时显式启停,每个Runner只拥有一个可等待的调度线程 | 已完成 | +| CR-12 | CSS跨层精确重复 | 七层样式保留多次视觉改造形成的重复顶层规则,前层声明被后层逐字覆盖 | 只删除能够由CSSOM证明完全重复的前层规则,并建立浏览器级重复门禁 | 已完成 | +| CR-13 | CSS跨文件嵌套精确重复 | 相同媒体上下文中的完整规则分散在不同样式文件,前层声明仍被后层完整重复 | 递归核对CSSOM上下文,只退休跨文件的精确副本 | 已完成 | +| CR-14 | CSS同文件精确重复 | 同一文件、同一媒体上下文仍保留多轮视觉调整形成的完整重复规则 | 删除较早副本并把同文件重复纳入浏览器门禁 | 已完成 | + +## CR-01验收口径 + +- 四个功能模块不得包含`urllib.request`或`/chat/completions`。 +- 非流式与流式请求的URL、鉴权、User-Agent、SSE累积和空响应行为保持不变。 +- 各功能原有错误类型和用户可见错误文案保持不变。 +- `LLMGateway`的会员、额度、主辅回退、首字后不中途换模型和审计规则保持不变。 +- 架构清单必须登记唯一传输入口;完整测试和真实主模型最小调用通过。 + +## CR-01结果 + +- 四个功能模块的运行代码由572行降至422行;新增唯一传输实现129行,生产代码净减少21行、 + 约1.4 KB。行数不是主要收益,关键是5处`/chat/completions`请求只剩1处。 +- 三套重复HTTP错误正文解析合并为一套;各功能原有错误类型和用户可见文案由专项测试固定。 +- 迁移期4个“Agent文件逐字相等”断言没有直接删除,而是替换为共享传输唯一所有权、提示词模块 + 归属、SSE行为和兼容模块对象契约。 +- 候选311项、纯`app/`导出248项、45项Playwright通过;24个JavaScript文件、架构/API注册表和 + SQLite完整性检查通过。 +- 使用候选数据库中加密保存的主模型完成真实非流式与流式最小调用,分别成功返回完整响应和 + 4个流式分片。调用未输出密钥或模型正文。 +- 本批不修改页面、CSS、提示词、业务计算、会员额度、模型回退、数据库或部署。 + +回档基线为`xiaobai-preservation-complete-20260801`;本批检查点为 +`xiaobai-reduction-01-llm-transport-20260801`。 + +## CR-02验收口径 + +- 仅纳入没有路径参数、请求体解析或专属异常分支的精确POST端点;其余路由保持原样。 +- 公开注册/登录端点继续在鉴权前分发;受保护端点继续严格执行登录、CSRF、注册表权限、处理器。 +- 27个映射路径必须都由权威API注册表解析,处理方法必须真实存在,公开与受保护集合不得重叠。 +- API路径、功能归属、访问角色、状态码、错误正文和静态页面绕过鉴权行为保持不变。 +- API清单生成器必须结构化读取显式映射;架构清查复用API清单,不再维护第二套路由发现规则。 + +## CR-02结果 + +- 2个公开端点和25个受保护端点改为显式委托映射,原来的79行重复分支被43行映射、分发与调用替代; + `backend/application.py`净减少36行,规范化源码约减少1.0 KB。 +- 带正则路径参数、请求体读取、查询参数转换或特殊异常语义的GET、POST、DELETE端点未改动。 +- 架构清查删除了自行扫描精确/正则API路径的第二套规则,改为消费权威`api.config.json`;API注册表的 + 53个精确路径、11个正则路径、功能归属和权限均未变化。 +- 原版231项、候选315项、纯`app/`导出252项、45项Playwright通过;24个JavaScript文件、 + API/架构注册表、Git空白检查和SQLite完整性检查通过。 +- 本批不修改前端、CSS、业务计算、数据源、数据库结构、LLM、会员规则或部署。 + +本批基线为`xiaobai-reduction-01-llm-transport-20260801`;检查点为 +`xiaobai-reduction-02-http-dispatch-20260801`。 + +## CR-03验收口径 + +- 图表模块不再定义第二份市场后缀转换函数,仍保留原局部名称和两个调用点。 +- 深市、沪市、北交所的既有映射结果保持不变;不借本批修正或扩展代码规则。 +- 原图表文件除该函数外的所有顶层定义继续与原版AST逐项相等。 +- 原版`_stock_market_code`函数的参数和函数体必须与唯一共享实现AST相等,运行时别名必须指向 + 同一个函数对象。 + +## CR-03结果 + +- 删除`backend/features/market/charts.py`中第二份10行定义,以1行导入别名复用共享实现,生产代码 + 净减少9行;全仓后端只剩一份沪深京后缀转换函数体。 +- 未合并实时聚合、东方财富图表、iFinD和Tushare的HTTP传输;它们的缓存、错误、重试和降级语义 + 不同,仅有外形相似,证据不足以安全抽象。 +- 原有迁移期整文件相等断言被等价范围断言、共享函数AST断言和唯一对象断言替代,没有降低门禁。 +- 原版231项、候选317项、纯`app/`导出254项、45项Playwright通过;API/架构注册表、 + 24个JavaScript文件、Git空白检查和SQLite完整性检查通过。 +- 本批不修改图表请求、数据来源、缓存、时间范围、行情计算、前端、CSS、数据库或部署。 + +本批基线为`xiaobai-reduction-02-http-dispatch-20260801`;检查点为 +`xiaobai-reduction-03-market-symbol-20260801`。 + +## CR-04验收口径 + +- 只合并参数、函数体和运行结果完全一致的数值转换函数,不借本批改变任何业务计算或异常默认值。 +- `finite_number`继续拒绝`NaN`与正负无穷;`non_nan_number`继续只拒绝`NaN`并保留正负无穷。 +- Tushare与智能选股必须复用有限数策略;市场洞察与情绪引擎必须复用非NaN策略,并继续暴露原局部 + `_number`名称以保持兼容。 +- 实时行情和图表转换器的空值、默认值或参数签名语义不同,必须继续独立保留,不能因名称相同而合并。 +- 原版函数参数和函数体分别与共享实现AST相等;四个消费者的局部别名必须指向对应的唯一函数对象。 + +## CR-04结果 + +- 删除Tushare、智能选股、市场洞察和情绪引擎中的四份重复函数体,新建两种明确命名的共享策略;生产 + 代码净减少约12行,全仓AST扫描不再发现完全相同的函数定义。 +- 将可复用的函数及模块AST契约归入测试辅助层,原有迁移保持性测试改为“未改范围保持相等、被替换 + 函数与共享实现相等、运行时唯一对象”三重断言,没有降低门禁。 +- 实时行情`backend/data/realtime.py::_number`与图表`backend/features/market/charts.py::_number` + 被明确保留;它们不是本批重复实现,也未改变行为。 +- 58项定向测试、41项保持性/治理测试、原版231项、候选320项、纯`app/`导出257项和45项 + Playwright通过;24个JavaScript文件、API/架构注册表、Git空白检查和SQLite完整性检查通过。 +- 本批不修改前端、CSS、接口、数据来源、行情口径、选股条件、数据库、LLM、权限或部署。 + +本批基线为`xiaobai-reduction-03-market-symbol-20260801`;检查点为 +`xiaobai-reduction-04-numeric-normalization-20260801`。 + +## CR-05验收口径 + +- 逐项扫描根级Python入口、生产代码、测试、工具和动态导入;没有消费者或兼容责任的入口才能删除。 +- 规范后端不得经由`screener`、`advanced_strategies`、`tushare_client`或`server`兼容入口 + 间接访问已经归位的实现。 +- 所有根级模块继续保持原导入名称、导出对象及模块对象身份,既有启动命令和第三方维护脚本不受影响。 +- `api_access`、选股Repository的惰性`sentiment_engine`导入及根级`database.py`属于已登记边界, + 分别留到HTTP、Repository阶段处理,不在本批跨边界修改。 + +## CR-05结果 + +- 审计确认21个根级兼容入口均有测试、工具、启动或原公开导入契约消费者,因此本批没有冒险删除文件。 +- 容器、策略编译器、选股引擎及数据同步命令的五处导入改为规范模块路径,正式代码不再通过四个根级 + 兼容模块反向进入实现;运行代码行数未增加。 +- 特性边界测试取消选股引擎旧例外,并新增全后端兼容导入门禁;只允许两项已登记过渡边界,后续代码 + 无法重新引入隐式根级依赖。 +- 候选321项、纯`app/`导出258项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite + 完整性检查通过;本批不涉及页面、CSS或浏览器行为。 +- 本批不修改业务计算、策略公式、数据源、API、数据库、LLM、权限、前端或部署。 + +本批基线为`xiaobai-reduction-04-numeric-normalization-20260801`;检查点为 +`xiaobai-reduction-05-compatibility-boundaries-20260801`。 + +## CR-06验收口径 + +- 只合并参数、函数体和异常行为完全相同的日期/文本转换;名称相似但空值、未来日期、错误文案或 + 输入格式不同的函数不得合并。 +- Tushare与选股引擎继续暴露局部`_display_date`名称,并分别指向唯一共享实现。 +- 原版两个`_display_date`函数必须分别与共享实现AST相等,所有原调用结果保持不变。 +- 市场洞察的日期显示函数会清理连字符并容忍空值,语义不同,必须继续独立保留。 + +## CR-06结果 + +- 删除Tushare与选股引擎内两个重复日期函数体,新增`display_compact_date`唯一策略;生产代码总 + 行数不增加,重复函数体由两份降为一份。 +- 架构清单登记日期格式唯一所有权;保持性测试改为未改范围AST相等、共享函数AST相等和运行时 + 对象身份三重契约,没有放宽原迁移门禁。 +- `normalize_date`、市场洞察日期显示、实时行情时间格式和会员日期边界因语义不同均原样保留。 +- 候选321项、纯`app/`导出258项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite + 完整性检查通过;本批不涉及页面、CSS或浏览器行为。 +- 本批不修改日期输入规则、业务计算、选股结果、接口、数据库、数据源、LLM、权限或部署。 + +本批基线为`xiaobai-reduction-05-compatibility-boundaries-20260801`;检查点为 +`xiaobai-reduction-06-date-formatting-20260801`。 + +## CR-07验收口径 + +- iFinD、图表、实时观察器和Provider适配器必须只在`build_data_gateway`创建,并由容器共享。 +- Tushare必须继续通过实时Token供应器按需创建,不能为了减少对象数量缓存过期Token。 +- 市场服务中为原版隔离测试桩保留的一处`TushareClient(self.token)`是明确兼容例外,不得被误判为 + 第二条正式数据链路。 +- 不得合并Tushare、iFinD、东方财富和腾讯的传输、缓存、重试或降级逻辑。 + +## CR-07结果 + +- 全后端构造点扫描确认iFinD、MarketChart、东方财富图表和实时观察器均只有网关一个创建位置; + `ApplicationContainer`暴露的是同一对象引用,没有第二份客户端。 +- Tushare Provider使用动态Token供应器,市场服务只有一处已登记测试兼容回退;本批没有发现可安全 + 删除的生产实现,因此不为追求行数强行修改运行代码。 +- 架构清单新增Provider创建所有权,自动测试会在未来出现第二个未登记构造点时失败。 +- 候选322项、纯`app/`导出259项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite + 完整性检查通过;本批不涉及页面、CSS或浏览器行为。 +- 本批不修改请求频率、缓存、重试、Token更新、数据源选择、计算口径、API、数据库或前端。 + +本批基线为`xiaobai-reduction-06-date-formatting-20260801`;检查点为 +`xiaobai-reduction-07-provider-ownership-20260801`。 + +## CR-08验收口径 + +- 只合并NDJSON响应头、事件序列化、完成事件、业务错误事件、客户端断线和连接关闭这些传输行为。 +- 问师继续直接输出原事件字典;复盘助手继续把文本分片包装为`delta/content`事件。 +- 两个功能各自的业务异常类型、请求体错误状态码、错误正文和流创建时机保持不变。 +- `_write_stream_event`与连接生命周期必须只由`backend/http/handler.py`拥有,应用大类和功能HTTP + 模块不再保留第二份实现。 + +## CR-08结果 + +- 删除问师和复盘助手各16行重复流式控制流,并将应用大类中的10行事件写入方法归入HTTP共享层; + 新共享实现29行、两个调用适配共3行,生产代码净减少10行。 +- 新增专项测试固定四个响应头、中文NDJSON序列化、增量顺序、完成事件、业务错误事件和关闭状态。 +- 候选324项、纯`app/`导出261项及45项Playwright通过;24个JavaScript文件、API/架构注册表、 + Git空白检查和SQLite完整性检查通过。 +- 本批不修改提示词、模型选择、会员计次、流式正文、前端解析、API路径、数据库或数据源。 + +本批基线为`xiaobai-reduction-07-provider-ownership-20260801`;检查点为 +`xiaobai-reduction-08-ndjson-transport-20260801`。 + +## CR-09验收口径 + +- 只有消费者全部属于单一领域、且能够按原函数体机械移动的方法才从应用门面移出。 +- `_ifind_field`与`_ifind_row_code`继续保持静态/类方法签名、字段优先级、大小写规则和代码正则。 +- 账号委托属于稳定公开门面;系统设置属于跨领域协调;后台刷新留到CR-11,本批均不得删除或重写。 +- 移动后`DashboardService`必须继续通过Mixin解析同名方法,调用点和返回值不变。 + +## CR-09结果 + +- 将iFinD字段匹配和股票代码提取两个方法从应用大类机械移动到股池服务,原版与迁移方法AST逐项 + 相等;应用大类不再直接拥有股池专属实现。 +- 连同迁移期遗留空行,`backend/application.py`减少32行,股池服务增加24行,生产代码净减少8行。 +- 候选324项、纯`app/`导出261项、24个JavaScript文件、API/架构注册表、Git空白检查和SQLite + 完整性检查通过;本批不涉及页面、CSS或浏览器行为。 +- 本批不修改字段匹配、涨跌停原因补全、接口、数据源、缓存、数据库、权限或前端。 + +本批基线为`xiaobai-reduction-08-ndjson-transport-20260801`;检查点为 +`xiaobai-reduction-09-service-facade-20260801`。 + +## CR-10验收口径 + +- 只移动调用方、数据表和业务含义均明确属于单一领域的方法;数据库连接、事务和返回值必须保持不变。 +- `list_sector_phase_overrides`、`save_sector_phase_override`与`delete_sector_phase_override`必须由 + `backend/features/heaven/repository.py`拥有,并继续通过`ReviewDatabase`的Mixin解析。 +- 不修改表结构、迁移顺序、时间格式、排序、冲突更新或删除结果语义。 +- `wencai_saved_queries`及其三个方法属于已登记的账户隔离兼容数据;即使前端入口已取消,也必须保留。 + +## CR-10结果 + +- 将五行行业阶段覆盖的查询、保存和删除三个方法从根级`database.py`机械移动到问天Repository; + 调用名称、SQL、事务边界、时间值和返回结果均未改变。 +- 根级数据库门面不再直接拥有问天领域的持久化实现,问财历史兼容表和方法完整保留,未扩大删除范围。 +- 34项Repository、问天、账户隔离、清理契约及迁移定向测试通过;候选324项、纯`app/`导出261项、 + 24个JavaScript文件、API/架构注册表、Git空白检查和SQLite完整性检查通过。 +- 本批不修改页面、CSS、API、数据库结构、行情、数据源、业务计算、LLM、权限或后台任务。 + +本批基线为`xiaobai-reduction-09-service-facade-20260801`;检查点为 +`xiaobai-reduction-10-repository-ownership-20260801`。 + +## CR-11验收口径 + +- 导入`backend.application`或构造`DashboardService`不得启动后台调度;必须先成功绑定HTTP端口, + 再由运行时显式启动。 +- 同一`InProcessJobRunner`重复启动调度器必须返回同一活动线程,停止必须置位并在限定时间内等待退出, + 有序停止后允许重新启动。 +- 运行时关闭顺序固定为:停止调度、等待已提交任务、关闭HTTP服务器;迁移对比工具继续兼容原版入口。 +- 三个任务的注册定义、5秒刷新频率、3秒初始延迟、幂等键、锁、重试、业务函数和结果不得改变。 +- 声明的超时继续是目标与审计字段;Python线程不能安全强杀,本批不伪造硬取消能力。 + +## CR-11结果 + +- 删除`DashboardService`构造阶段的调度副作用,端口占用、模块导入和单元测试不再提前创建后台写线程; + `backend/bootstrap/runtime.py`成为正式启动与停止所有者。 +- `InProcessJobRunner`集中持有调度停止事件和线程引用;重复启动幂等,停止可等待,原任务锁、持久化运行 + 状态、成功幂等、失败记录和后续重试逻辑保持不变。 +- 新增语法树与运行顺序门禁,固定“构造不启动”“绑定后启动”“停止后关服”,并补齐重复启动与重启测试。 +- 候选328项、纯`app/`导出265项和45项Playwright通过;24个JavaScript文件、API/架构注册表、 + Git空白检查和SQLite完整性检查通过。 +- 本批没有可安全删除的重复任务实现;为补齐原先缺失的生命周期,生产代码净增加24行。增加内容仅为 + 调度状态、幂等启停和运行时委托,不新增业务层、任务或兼容包装。 +- 本批不修改页面、CSS、API、数据源、刷新计算、自动选股条件、数据库结构、权限或LLM。 + +本批基线为`xiaobai-reduction-10-repository-ownership-20260801`;检查点为 +`xiaobai-reduction-11-background-jobs-20260801`。 + +## CR-11人工验收修正 + +- 2026-08-02人工验收发现本地页面可访问,但行情与LLM同时无法连接。第一原因是验收服务由受限 + 自动化会话启动,子进程继承了禁止外部网络访问的权限;重新在主机正常网络权限下启动后恢复。 +- 随后的主模型连接测试暴露`LLMServiceMixin`机械迁移时遗漏`validate_text`导入,导致请求在真正 + 访问模型前抛出`NameError`并关闭HTTP连接;恢复原依赖并增加保存模型连接探测的运行契约测试。 +- 网站自身实测`000001`返回Tushare日K 60根、分时242点;主模型 + `MiniMax-M2.7-highspeed`在2236毫秒内回复`OK`,证明服务进程的数据与LLM出网链路均已恢复。 +- 修正后候选329项、纯`app/`导出266项通过;本次只恢复缺失导入和测试,不修改模型配置、额度、 + 提示词、回退策略、行情来源或计算逻辑。 +- 继续验收观势时发现模型已经成功返回,但问天服务在保存解势记录前关闭了HTTP连接。原因是原版 + `server.py`已有的`secrets`导入在机械拆分到问天服务时遗漏,生成非观气记录去重键时触发 + `NameError`。迁移版恢复该标准库依赖,并增加“模型成功返回后保存观势结果”的完整服务回归测试。 +- 使用`000001 平安银行`完成真实页面复测:六爻安全门6/6通过,解势结果正常返回并写入历史, + `8797`错误日志为空。该修正不改变提示词、模型选择、额度、卦象计算、记录结构或前端行为。 + +本修正基线为`xiaobai-reduction-11-background-jobs-20260801`;检查点为 +`xiaobai-reduction-11-runtime-connectivity-fix-20260802`;后续解势修正检查点为 +`xiaobai-reduction-11-heaven-interpret-fix-20260802`。 + +## CR-12验收口径 + +- 本批只处理不同样式文件中、同为顶层、选择器与完整声明逐字等价的规则;媒体查询、伪状态、 + 动画、问天隔离样式以及仅外形相似的规则不进入删除范围。 +- 删除的必须是较早加载的副本,较晚层继续提供完全相同的最终声明;样式加载顺序、变量、HTML、 + JavaScript和主题切换逻辑均不改变。 +- 迁移保真测试必须逐段登记允许退休的原始CSS文本,除登记片段外,其余源码继续与原版逐字符相等。 +- 浏览器必须验证跨层顶层精确重复为零,并通过日间、夜间、桌面、390px移动端及全站交互回归。 + +## CR-12结果 + +- 通过浏览器CSSOM扫描七层运行样式,共发现57组完整重复规则;本批只批准其中7组跨文件顶层重复, + 分别涉及工作区显示、折叠侧栏、板块轮动末列、选股概率值、摘要条两项声明及龙虎榜原因列。 + 其余50组位于同文件或嵌套媒体条件等更复杂环境,证据不足,继续保留。 +- 删除7条较早加载的规则,三个生产CSS文件净减少19行、480字节;后层最终规则、选择器优先级与 + 加载顺序均未改变,没有新增兼容覆盖或第二套样式实现。 +- 新增浏览器CSSOM门禁,任何两个样式层再次出现相同顶层选择器与完整声明都会失败;迁移保真门禁 + 只允许已登记的7个精确源码片段退休,其他CSS差异仍会失败。 +- 真实`8797`页面复核情绪周期日间/夜间、龙虎榜和390×844移动端;三个受影响节点的计算样式 + 与删除前一致,移动端无横向溢出。候选330项、CSS/前端契约33项、迁移对照63项及46项 + Playwright全部通过,24个JavaScript文件、API/架构注册表和SQLite完整性检查通过。 +- 本批不修改页面布局、颜色、字体、间距、响应式规则、主题、动画、业务功能、API、数据库或部署。 + +本批基线为`xiaobai-reduction-11-heaven-interpret-fix-20260802`;检查点为 +`xiaobai-reduction-12-css-exact-duplicates-20260802`。 + +## CR-13验收口径 + +- 本批只处理不同样式文件中、处于浏览器规范化后完全相同媒体条件下、选择器与完整CSSOM声明完全 + 相同的规则;不同媒体上下文、同文件重复、近似声明、动画和问天隔离样式继续保留。 +- 删除的必须是较早加载的副本,较晚样式层继续提供相同声明;媒体条件、规则顺序、选择器优先级、 + 变量、HTML、JavaScript和主题逻辑不得改变。 +- 保真门禁必须逐段登记允许退休的原始源码;浏览器门禁必须递归遍历嵌套规则,并只将同一上下文内 + 跨文件的完整重复判为失败。 +- 390×844明暗主题、1000×800中等宽度和1000×600低高度断点必须保持原计算样式与视觉结果。 + +## CR-13结果 + +- 浏览器CSSOM确认22组跨文件嵌套重复:1组位于721-1279px媒体条件,12组位于720px移动端条件, + 9组位于720px或1023px低高度复合条件;全部删除较早层副本,后层规则原样保留。 +- `styles.css`减少65行,`redesign-v2.css`减少15行,生产CSS合计净减少80行、约1.9 KB;没有新增 + 兼容覆盖、声明值、选择器或样式文件。 +- Playwright门禁由顶层扫描扩展为递归上下文扫描,修改后同一嵌套上下文的跨文件完整重复为0;同文件 + 重复和不同上下文规则不在本批范围,未被误删。 +- 1000×800和1000×600修改前后截图逐字节一致;390×844明暗主题的关键显示、定位、间距、网格、 + 溢出和导航状态一致,页面目视无差异。 +- 候选330项、CSS/前端契约33项、迁移对照63项及46项Playwright全部通过;24个JavaScript文件、 + API/架构注册表和SQLite完整性检查通过。 +- 本批不修改页面布局、颜色、字体、间距、主题、动画、业务功能、API、数据库、数据源、LLM或部署。 + +本批基线为`xiaobai-reduction-12-css-exact-duplicates-20260802`;检查点为 +`xiaobai-reduction-13-css-nested-duplicates-20260802`。 + +## CR-13后续产品修正:龙虎榜整页滚动 + +- 2026-08-02用户明确要求取消龙虎榜“当日操作明细单独纵向滚动”,改为龙虎榜主内容区整页纵向滚动, + 解决低分辨率下操作明细可视高度过小的问题;这是经批准的产品行为变化,不作为CSS去重处理。 +- 龙虎榜从桌面固定视口共享规则中独立出来;主内容区继续使用工作区高度并承担纵向滚动,游资卡片、 + 操作明细和待归类席位按内容自然展开,宽操作表继续保留横向滚动。 +- 保真门禁以精确源码替换单独登记本次差异,其他CSS仍与原母版逐字符比较;未新增覆盖层或第二套规则。 +- 1366×768真实页面中主内容区为692px、内容高度为2620px,整页滚动可达;操作明细自身高度与内容 + 高度一致,不再形成纵向小窗口,1180px宽表仍可横向滚动。 +- 本次不修改龙虎榜数据、筛选、搜索、游资卡牌、表格字段、游资档案、API、数据库或其他页面的 + 滚动所有权。 + +本修正基线为`xiaobai-reduction-13-css-nested-duplicates-20260802`;检查点为 +`xiaobai-fix-dragon-page-scroll-20260802`。 + +## CR-14验收口径 + +- 只处理同一CSS文件、同一浏览器规范化媒体上下文中,选择器和完整CSSOM声明完全相同的规则; + 不同媒体上下文、近似声明、动画和问天隔离样式继续保留。 +- 每组只删除较早出现的副本并保留最后一份原规则;样式文件加载顺序、媒体条件、选择器优先级、变量、 + HTML、JavaScript和主题逻辑均不得改变。 +- 保真门禁必须精确登记原始片段及其出现/退休次数;浏览器门禁从“只拒绝跨文件重复”提升为 + “同一上下文内任何完整重复均拒绝”。 +- 1366×768桌面暗色关键页面和390×844移动端关键页面的尺寸、滚动范围及视觉结果必须保持不变, + 并通过全站Playwright回归。 + +## CR-14结果 + +- 浏览器CSSOM确认33组同文件精确重复,其中两个规则各出现三次;共退休35个较早副本: + `styles.css`9个、`renovation.css`25个、`redesign-v2.css`1个,运行时同上下文完整重复降为0。 +- 三个生产CSS文件合计净减少97行、3272字节;未新增选择器、声明、覆盖层或样式文件,最后一份原规则 + 及其媒体上下文全部保留。 +- 保真门禁新增精确出现次数与退休次数审计,除登记片段外继续与原母版逐字节比较;Playwright CSSOM + 门禁现会拒绝跨文件和同文件重复,后续不能重新堆回同类规则。 +- 1366×768暗色模式复核情绪周期、集合竞价、题材库、智能选股、问师和我的复盘;390×844复核 + 情绪周期、集合竞价、智能选股和我的复盘。关键尺寸、滚动范围保持一致,移动端情绪周期截图逐像素一致, + 其余页面目视无差异且无横向溢出。 +- 候选330项、CSS/前端契约33项、迁移对照63项及46项Playwright全部通过;24个JavaScript文件、 + API/架构注册表和SQLite完整性检查通过。 +- 本批不修改页面布局、颜色、字体、间距、响应式行为、主题、动画、业务功能、API、数据库、数据源、 + LLM或部署。 + +本批基线为`xiaobai-fix-dragon-page-scroll-20260802`;检查点为 +`xiaobai-reduction-14-css-same-file-duplicates-20260802`。 + +## 人工验收记录 + +- 2026-08-01:用户检查CR-02与CR-03运行结果,确认未发现明显异常。本记录仅表示本轮可见功能与 + 页面使用未发现明显回归,不替代后续批次各自的自动测试和人工抽查。 diff --git a/docs/governance/stage-01-baseline.md b/docs/governance/stage-01-baseline.md new file mode 100644 index 0000000..efada7b --- /dev/null +++ b/docs/governance/stage-01-baseline.md @@ -0,0 +1,60 @@ +# Stage 01: Governance Baseline + +Date: 2026-07-29 + +Baseline commit: `0030bb8cc18c5aa7107dd8fd866355a6507bd6da` + +## Purpose + +This baseline freezes observable behavior before architecture governance begins. Later stages +may move code and introduce internal contracts, but must not change API behavior, account +boundaries, persisted user data, desktop presentation, or existing workflows unless a change +is approved separately. + +## Deployment Contract + +- One Python process serves the API and static browser client. +- One SQLite database is persisted at `data/review.db`. +- Docker exposes `0.0.0.0:8765` and mounts only `./data` at `/app/data`. +- Public market data is shared; private records are scoped by `user_id`. +- Market-data and LLM credentials remain server-side. + +## Verified Baseline + +- Python: 169 tests passed. +- Playwright: 45 tests passed at desktop and mobile viewports. +- JavaScript entry points pass `node --check`. +- `git diff --check` reports no patch errors. +- SQLite `PRAGMA integrity_check` returns `ok`. +- The database was backed up with the SQLite backup API to + `data/backups/governance-stage-01-0030bb8.db` and the backup independently passed + `PRAGMA integrity_check`. The backup is intentionally excluded from Git. + +## Repeatable Verification + +Run the fast baseline on every structural change: + +```shell +python tools/verify_baseline.py +``` + +Run the browser suite at phase boundaries: + +```shell +python tools/verify_baseline.py --e2e +``` + +## Regression Gates + +1. API routes and response fields remain compatible until a versioned contract says otherwise. +2. Existing SQLite files must upgrade without deleting or reassigning user-owned rows. +3. A failed external data request must not synthesize market prices. +4. Ordinary, member, and administrator permissions must remain distinct. +5. Desktop visual refactors require 1080P and 4K comparison in both themes. +6. Mobile work is isolated from the approved desktop shell and workflows. +7. Old code is deleted only after its replacement is active and reference scans are clean. + +## Rollback + +Code can return to this point with Git commit `0030bb8`. Database rollback must use the +matching backup above; a code rollback alone is not sufficient after a schema migration. diff --git a/docs/governance/stage-02-inventory.md b/docs/governance/stage-02-inventory.md new file mode 100644 index 0000000..4754aa8 --- /dev/null +++ b/docs/governance/stage-02-inventory.md @@ -0,0 +1,72 @@ +# Stage 02: Architecture Inventory + +Date: 2026-07-29 + +The machine-readable inventory is `architecture-inventory.json`. Regenerate it with: + +```shell +python tools/build_architecture_inventory.py +python tools/build_architecture_inventory.py --check +``` + +## Current Shape + +- The product is a single-container modular monolith with one Python process and SQLite WAL. +- The browser is a build-free single-page application served by the same process. +- The primary navigation exposes 16 workspaces. +- The current database bootstrap defines 34 tables. +- HTTP routing and service orchestration are concentrated in `server.py`. +- Schema creation, inline migrations, and all persistence methods are concentrated in + `database.py`. +- The frontend loads six ordered CSS layers and one global application script. +- Background refresh and automatic screener work execute as daemon threads in the HTTP + process. + +## Ownership Inventory + +### Shared market and system data + +Dashboard snapshots, synchronization runs, stock master data, daily bars, benchmark bars, +daily indicators, fundamental indicators, money flow, auction factors, earnings events, +popularity factors, institutional list data, public screener strategies, reason overrides, +seat aliases, sector phase overrides, and encrypted system settings are shared. + +### User-owned data + +Sessions, personal credentials, birth profiles, watchlists, review notes, custom strategies, +private screener runs, mentor messages and preferences, saved queries, tracking entries, +alerts, trades, assistant messages, and heaven readings are user-scoped. Every repository +extracted in later stages must preserve this boundary explicitly. + +## Runtime Entrypoints + +- HTTP and application bootstrap: `server.py` +- Persistence and migrations: `database.py` +- Access policy: `api_access.py` +- Market providers: `tushare_client.py`, `ifind_client.py`, `chart_data_provider.py`, + `realtime_aggregator.py` +- Deterministic computation: `sentiment_engine.py`, `screener.py`, `advanced_strategies.py`, + `market_insights.py`, `heaven_engine.py` +- LLM calls: `mentor_agent.py`, `heaven_agent.py`, `assistant_agent.py`, `llm_strategy.py` +- Browser shell and pages: `static/index.html`, `static/app.js`, and the ordered CSS files + +## Primary Structural Risks + +1. Request routing, use cases, scheduling, provider selection, serialization, and account + context coexist in one service module. +2. Database migrations cannot be reviewed independently from repository behavior. +3. Several business paths instantiate provider clients directly, so source policy is not + centrally enforceable. +4. LLM authorization, quota accounting, model selection, streaming, and error handling are + distributed across multiple adapters. +5. Global DOM state and page behavior share one JavaScript file, increasing cross-page + regression risk. +6. CSS correctness depends on load order and late overrides rather than explicit layer + ownership. +7. In-process daemon jobs have no durable queue and some failure paths are not observable. + +## Inventory Limits + +The JSON inventory records source-level declarations and references. It does not claim that +every declared endpoint is exercised or every table is populated. Runtime coverage and data +quality are separate contracts introduced in later governance stages. diff --git a/docs/governance/stage-04-registries.md b/docs/governance/stage-04-registries.md new file mode 100644 index 0000000..db03c09 --- /dev/null +++ b/docs/governance/stage-04-registries.md @@ -0,0 +1,48 @@ +# Stage 04: Governance Registries + +Date: 2026-07-29 + +## Result + +Four versioned registries now describe the existing product before runtime decomposition: + +1. `config/pages.config.json` registers all 16 primary workspaces. +2. `config/features.config.json` registers 20 feature owners and their access/data scope. +3. `config/api.config.json` registers 74 method/path combinations, including dynamic paths. +4. `config/data-fields.config.json` registers 18 initial canonical data products and provider + eligibility. + +The API registry is generated from the current request handler so route drift fails tests. The +other registries are curated contracts and may change only through an explicit product or data +governance decision. + +## Access Decisions Preserved + +- Health, login, and registration are public. +- Market views require an authenticated account. +- Intelligent screening, Mentor, Wentian, and their history endpoints require membership. +- My Review remains visible to authenticated users; LLM assistant endpoints remain member + gated inside that workspace. +- System management and shared knowledge modification remain administrator-only. +- Frontend visibility does not grant API access. + +## Data Decisions Preserved + +- Tushare and licensed iFinD data may be calculation inputs when a dataset contract permits it. +- Eastmoney and Tencent public endpoints are display-only in the initial registry. +- Analyst consensus history and Level-2 microstructure remain blocked rather than silently + approximated. +- Chart fallbacks remain separate from calculation datasets. +- The current unadjusted deterministic daily-bar behavior is recorded honestly; adjustment + normalization is deferred to the data-quality phase rather than changed here. + +## Transitional Rule + +These files do not yet replace `server.py`, `api_access.py`, or the current frontend navigation. +They are checked against those surfaces to prevent untracked drift. Later phases make each +registry authoritative in one atomic migration with compatibility tests. + +## Verification + +`tests/test_governance_registries.py` verifies uniqueness, page coverage, current API coverage, +explicit public routes, feature ownership, role validity, and provider eligibility. diff --git a/docs/governance/stage-05-bootstrap.md b/docs/governance/stage-05-bootstrap.md new file mode 100644 index 0000000..313f57c --- /dev/null +++ b/docs/governance/stage-05-bootstrap.md @@ -0,0 +1,24 @@ +# Stage 05: Bootstrap and Dependency Assembly + +Date: 2026-07-29 + +## Result + +- Environment and legacy LLM credential resolution moved to `backend/bootstrap/settings.py`. +- Encryption-key initialization remains behavior-compatible and server-side. +- Stable service construction moved to `backend/bootstrap/container.py`. +- `DashboardService` keeps its compatibility attributes but receives them from one application + container. +- The iFinD client is instantiated once and shared by chart services. +- HTTP routes, API payloads, background thread timing, database paths, and frontend assets are + unchanged. + +## Transitional Boundary + +Some methods still construct Tushare clients directly. Stage 06 introduces `DataGateway` and +migrates those provider creation paths without combining that work with bootstrap changes. + +## Rollback + +Reverting this stage restores inline service construction. No database or configuration +migration is required. diff --git a/docs/governance/stage-06-data-gateway.md b/docs/governance/stage-06-data-gateway.md new file mode 100644 index 0000000..83bd32c --- /dev/null +++ b/docs/governance/stage-06-data-gateway.md @@ -0,0 +1,29 @@ +# Stage 06: Unified Data Gateway + +Date: 2026-07-29 + +## Result + +- Added canonical provider and dataset contracts under `backend/data`. +- Added `DataSourcePolicy`, loaded from the Stage 04 data registry. +- Added provider adapters for Tushare and iFinD. +- Added one `DataGateway` that owns Tushare creation, the shared iFinD client, chart routing, + and isolated Eastmoney/Tencent realtime observation. +- Replaced all real `DashboardService` Tushare construction paths with the gateway. +- Kept one compatibility constructor for unit tests that instantiate an incomplete service with + `__new__`; production instances never use it. +- The Tushare token is supplied lazily, so administrator credential changes do not leave a + stale client in memory. + +## Enforcement Introduced + +- Unregistered datasets fail. +- Blocked datasets fail. +- Public-web providers cannot be promoted to calculation inputs through a fallback call. +- Display chart fallbacks remain distinct from deterministic calculation datasets. + +## Deferred to Stage 07 + +Stage 06 centralizes provider access but does not yet attach freshness, coverage, unit, and +point-in-time quality evidence to every returned observation. Stage 07 introduces those gates +without changing provider routing again. diff --git a/docs/governance/stage-07-data-quality.md b/docs/governance/stage-07-data-quality.md new file mode 100644 index 0000000..8d2f671 --- /dev/null +++ b/docs/governance/stage-07-data-quality.md @@ -0,0 +1,32 @@ +# Stage 07: Data Quality and Provenance Gates + +Date: 2026-07-29 + +## Result + +- Added a quality rule for every registered data product. +- Added canonical Asia/Shanghai timestamp handling. +- Added source and usage verification before quality acceptance. +- Added maximum-age checks for realtime auction, intraday charts, and realtime indices. +- Added minimum coverage thresholds for deterministic datasets. +- Added unit profiles for prices, shares, currency, percentages, ratios, ranks, and timestamps. +- Added adjustment checks that distinguish current unadjusted deterministic bars from iFinD + forward-adjusted display charts. +- Added announcement-date point-in-time checks for financial data. +- Added explicit provider chains; a display fallback cannot silently become a calculation + source. +- Analyst consensus and Level-2 remain blocked until a qualified provider is registered. + +## Fail-Closed Contract + +A calculation evidence envelope is rejected when its source is unauthorized, its dataset is +blocked, its timestamp is from the future, its realtime data is stale, its coverage is below +the registered threshold, its units or adjustment mode differ, or its financial record was not +available at the evaluation time. + +## Compatibility + +Existing legacy provider response shapes remain unchanged in this stage. New governed feature +paths must submit quality evidence through `DataGateway.require_quality`. Existing feature +paths receive envelopes as they migrate behind domain services, avoiding a simultaneous +rewrite of calculations and provider routing. diff --git a/docs/governance/stage-08-database-migrations.md b/docs/governance/stage-08-database-migrations.md new file mode 100644 index 0000000..0ec3262 --- /dev/null +++ b/docs/governance/stage-08-database-migrations.md @@ -0,0 +1,28 @@ +# Stage 08: Database Connection and Migration Foundation + +Date: 2026-07-29 + +## Result + +- Centralized SQLite connection policy in `SQLiteConnectionFactory`. +- Preserved WAL, foreign-key enforcement, row mapping, handle cleanup, and the existing + 20-second contention tolerance. +- Added an ordered migration runner with immutable checksums and an applied-migration ledger. +- Added savepoint rollback so a failed migration cannot be recorded or leave partial schema. +- Adopted existing databases as version `0001` only after verifying the required legacy + tables. +- Kept the legacy idempotent bootstrap in place for compatibility with databases created by + every previous application version. + +## Forward Rule + +All schema changes after this stage must be a new immutable module under +`backend/database/migrations`. Editing an applied migration is rejected by checksum. A +database containing a migration unknown to the running code is rejected rather than opened +with an older schema interpretation. + +## Residual Risk + +The historical inline bootstrap remains a compatibility facade during repository migration. +It may be removed only after legacy upgrade fixtures cover every supported historical shape. +No user table or row is rewritten in this stage. diff --git a/docs/governance/stage-09-repositories.md b/docs/governance/stage-09-repositories.md new file mode 100644 index 0000000..a4a105c --- /dev/null +++ b/docs/governance/stage-09-repositories.md @@ -0,0 +1,27 @@ +# Stage 09: Account-Scoped Repository Boundaries + +Date: 2026-07-29 + +## Result + +- Added narrow repository ports for alerts, the trade journal, and strategy tracking. +- Added SQLite adapters that expose only the persistence operations each service requires. +- Required a positive account owner on every private read, write, update, and delete path. +- Kept the shared automatic screener-run lookup explicit as the sole zero-owner read in the + strategy tracking adapter. +- Routed the application container through a repository bundle. +- Removed direct alert and trade deletion/update calls from the HTTP-facing dashboard service. +- Preserved structural compatibility for isolated tests and gradual extraction from the legacy + database facade. + +## Boundary + +Application services depend on repository protocols. The SQLite implementation may later be +replaced without changing those services. Repository adapters do not call market providers, +and provider adapters do not access user tables. + +## Residual Migration + +The legacy `ReviewDatabase` still contains the SQL behind these adapters and remains the +compatibility facade for features not yet extracted. Subsequent feature stages can move SQL +behind the same ports one feature at a time after account-isolation tests pass. diff --git a/docs/governance/stage-10-feature-services.md b/docs/governance/stage-10-feature-services.md new file mode 100644 index 0000000..88067dd --- /dev/null +++ b/docs/governance/stage-10-feature-services.md @@ -0,0 +1,28 @@ +# Stage 10: Feature Application Service Layout + +Date: 2026-07-29 + +## Result + +- Created the governed `backend/features/` source boundary. +- Moved alert behavior into the alerts feature. +- Moved trade-journal behavior into the review feature. +- Moved strategy-tracking behavior into the screener feature. +- Changed the application container to import feature-owned services directly. +- Reduced the former top-level service modules to compatibility exports, preserving existing + imports without maintaining duplicate implementations. +- Added dependency tests that prevent feature services from importing HTTP delivery code or + concrete market-provider adapters. + +## Template + +Each migrated feature owns its application behavior and depends on repository or gateway +ports. HTTP delivery and background jobs may invoke the service, but neither may become the +owner of its rules. The same layout is now available for the remaining market, account, +Mentor, Wentian, and screener services. + +## Compatibility + +No route, response shape, persisted data, service method, or top-level import path changes in +this stage. Compatibility exports are removed only after all internal and external callers +use the feature packages. diff --git a/docs/governance/stage-11-http-governance.md b/docs/governance/stage-11-http-governance.md new file mode 100644 index 0000000..509a517 --- /dev/null +++ b/docs/governance/stage-11-http-governance.md @@ -0,0 +1,28 @@ +# Stage 11: HTTP Route, Access, and Error Governance + +Date: 2026-07-29 + +## Result + +- Promoted `config/api.config.json` from a transitional inventory to the runtime route and + access registry. +- Added deterministic exact and regex route resolution with duplicate and regex validation. +- Replaced hand-maintained member/admin path sets with the registered access contract. +- Rejected unregistered API routes before business dispatch. +- Added safe request correlation IDs to JSON responses and `X-Request-ID` headers. +- Extended every legacy JSON error with stable `code`, `message`, and `request_id` fields while + preserving the existing `error` field used by the browser. +- Kept the current request handler and all route response bodies compatible while feature + route modules are migrated incrementally. + +## Runtime Authority + +Changing or adding an API now requires one coherent change to the handler and API registry. +The generated source inventory test prevents either side from drifting. Backend access remains +authoritative; frontend visibility cannot grant a route. + +## Residual Migration + +Individual dispatch branches still live in the compatibility request handler. Feature-owned +controllers will move behind the same registry in later stages without changing route identity, +authorization, or error serialization. diff --git a/docs/governance/stage-12-background-jobs.md b/docs/governance/stage-12-background-jobs.md new file mode 100644 index 0000000..91f7801 --- /dev/null +++ b/docs/governance/stage-12-background-jobs.md @@ -0,0 +1,30 @@ +# Stage 12: Governed Background Jobs + +Date: 2026-07-29 + +## Result + +- Registered market refresh, automatic screening, and iFinD event enrichment as versioned + jobs with schedules, date policy, dependencies, locks, timeouts, retry limits, and output + versions. +- Added the `job_runs` migration and persistent run ledger. +- Centralized worker and scheduler thread creation in `InProcessJobRunner`. +- Added process-level lock keys and persistent idempotency keys. +- Persisted successful, failed, and retried attempts with elapsed time and normalized error + type. +- Exposed recent job runs in administrator system status. +- Limited retained completed history while preserving running jobs. +- Kept existing feature services and the detailed market `sync_runs` audit unchanged. + +## Compatibility + +The runner remains in-process, matching the current single-container deployment. Jobs call the +same application methods as HTTP requests and do not depend on request-local account state. +The persistent contract permits a later worker process without changing job identities or +business calculations. + +## Timeout Boundary + +Timeouts are declared and elapsed time is recorded. Python threads cannot be terminated safely, +so hard cancellation remains cooperative until jobs move to a durable worker process. Locks and +idempotency prevent concurrent duplicate execution in the current single-process deployment. diff --git a/docs/governance/stage-13-llm-gateway.md b/docs/governance/stage-13-llm-gateway.md new file mode 100644 index 0000000..2c454cc --- /dev/null +++ b/docs/governance/stage-13-llm-gateway.md @@ -0,0 +1,32 @@ +# Stage 13: Unified LLM Gateway + +## Boundary + +All runtime model calls now enter through `backend/llm/gateway.py`. Feature agents retain +their deterministic context assembly, prompt content, and provider response parsing. + +The gateway owns: + +- membership and daily quota enforcement; +- primary and fallback model selection; +- fallback only before the first streamed delta; +- stable user-visible availability and interruption errors; +- one logical-call audit record with feature, model role, prompt version, latency, status, + normalized error code, and token fields reserved for providers that report usage. + +Administrator connection probes also cross the gateway boundary, but do not consume member +quota or create usage records. + +## Compatibility + +- Mentor and review-assistant stream payloads are unchanged. +- Heaven readings retain their primary/fallback notice and persistence behavior. +- Strategy compilation still falls back to the deterministic local compiler when both model + profiles are unavailable, while access and quota failures remain blocking. +- Provider credentials and raw provider failures remain outside browser responses. + +## Residual Risk + +The current OpenAI-compatible streaming providers do not consistently return token usage, so +the audit schema records zero until transport adapters expose trustworthy token counts. Request +cancellation remains bounded by the existing provider socket timeout. diff --git a/docs/governance/stage-14-frontend-boundaries.md b/docs/governance/stage-14-frontend-boundaries.md new file mode 100644 index 0000000..f584a25 --- /dev/null +++ b/docs/governance/stage-14-frontend-boundaries.md @@ -0,0 +1,38 @@ +# Stage 14: Frontend Request and State Boundaries + +## Request Boundary + +`static/shared/api.js` is now the only application file allowed to call `fetch`. It owns: + +- JSON serialization and response parsing; +- CSRF attachment for mutating requests; +- expired-session notification; +- abort signals; +- NDJSON stream decoding and normalized stream errors. + +The mentor and review-assistant streams use the same client as ordinary API requests. Existing +function signatures and page interactions remain unchanged. + +## State Boundary + +`static/shared/state.js` stores mutable state in explicit domains: session, market, entity +details, review, screener, mentor, and heaven. A compatibility proxy retains the existing flat +access syntax while rejecting unregistered fields. New page modules can request their owned +domain without depending on another page's data. + +This stage establishes a migration boundary rather than splitting the build-free monolith in a +single high-risk edit. Page extraction can now proceed domain by domain with no contract change. + +## Enforcement + +Automated checks require that: + +- only `shared/api.js` contains browser `fetch` calls; +- shared state and API scripts load before `app.js`; +- application state is created through the shared state boundary. + +## Residual Risk + +`static/app.js` still contains page renderers and event handlers in one file. The state domains +make ownership explicit, but those functions should move into page modules only in later, +independently verified stages. diff --git a/docs/governance/stage-15-frontend-shell.md b/docs/governance/stage-15-frontend-shell.md new file mode 100644 index 0000000..1f77f2f --- /dev/null +++ b/docs/governance/stage-15-frontend-shell.md @@ -0,0 +1,42 @@ +# Stage 15: Shared Frontend Shell and Page Registry + +## Runtime Page Registry + +`static/pages.config.js` is the build-free runtime representation of +`config/pages.config.json`. It registers every primary workspace plus the internal strategy +tracking workspace. Automated parity checks prevent titles, feature ownership, access labels, +groups, default-page selection, and layout metadata from drifting between the two registries. + +Legacy route aliases are resolved by the registry instead of page business code. The registry +describes navigation and presentation metadata only; backend authorization remains +authoritative. + +## Shared Shell + +`static/shared/shell.js` now owns: + +- sidebar initialization, persistence, collapse state, and responsive control labels; +- primary and mobile navigation binding and active-state synchronization; +- workspace mounting, entry animation, URL state, and scroll reset; +- header command-menu lifecycle; +- market-summary expansion; +- status-bar page titles and data dates; +- the single-open-dialog lifecycle used by global application dialogs. + +`static/app.js` retains feature-specific enter and leave behavior, such as stopping Wentian +animations or loading auction data. It asks the shell to mount a registered page and no longer +mutates global page geometry directly. + +## Compatibility + +- Existing DOM IDs, CSS classes, query parameters, page animations, and mobile navigation are + unchanged. +- `screenerTrackingView` continues to highlight the Intelligent Screener navigation item. +- Existing function entry points remain as thin compatibility facades where feature code still + calls status, dialog, or command-menu services. + +## Residual Risk + +Feature renderers and feature event binding still share `static/app.js`. Their state ownership +is now explicit and their shell dependencies are removed, so later page-module extraction can +be performed one feature at a time instead of as a single rewrite. diff --git a/docs/governance/stage-16-css-tokens.md b/docs/governance/stage-16-css-tokens.md new file mode 100644 index 0000000..099ef9b --- /dev/null +++ b/docs/governance/stage-16-css-tokens.md @@ -0,0 +1,49 @@ +# Stage 16: CSS Tokens and Cascade Governance + +## Scope + +This stage changes CSS ownership, not visual design. Existing selectors, page geometry, +responsive behavior, theme behavior, and the isolated Wentian visual layer remain intact. + +## Canonical Token Layer + +`static/shared/tokens.css` is the only owner of global application tokens. It is loaded before +all application styles and follows a three-layer contract: + +1. Primitive tokens contain raw palette, dimension, elevation, and motion values. +2. Semantic tokens describe interface meaning such as canvas, surface, border, text, action, + market direction, and warning states. +3. Component tokens define shared card, control, shell, table, chart, and profile contracts. + +Dark mode overrides semantic and compatibility values in the same file. It does not redefine +component geometry. The `--wt-*` namespace remains owned by `wentian-v2.css` because Wentian +has a deliberately isolated visual language. + +## Compatibility + +The historical `--xb-*`, `--r2-*`, and flat variables such as `--blue`, `--line`, and `--up` +remain compatibility aliases. Their effective light and dark values are unchanged. New CSS +must use semantic or component tokens; compatibility names exist only so feature selectors can +be migrated incrementally without a broad visual rewrite. + +The stylesheet order is fixed as: + +1. shared tokens; +2. legacy/base styles; +3. renovation and page redesign rules; +4. canonical non-Wentian design-system rules; +5. runtime theme selectors; +6. isolated Wentian rules. + +## Enforcement + +`tests/test_css_governance.py` verifies the load order, the three token layers, single global +ownership, compatibility coverage, and Wentian isolation. A new global `:root` token block in +any legacy stylesheet fails the regression suite. + +## Residual Migration + +Page styles still contain literal values and historical variable references. Removing those is +an incremental page-by-page task because blindly replacing them would risk changing already +accepted visuals. Stage 16 establishes the ownership boundary that prevents new drift while +leaving safe migration points for later stages. diff --git a/docs/governance/stage-17-page-modules.md b/docs/governance/stage-17-page-modules.md new file mode 100644 index 0000000..95f974e --- /dev/null +++ b/docs/governance/stage-17-page-modules.md @@ -0,0 +1,53 @@ +# Stage 17: Frontend Page Modules and Shared Components + +## Scope + +This stage establishes frontend feature ownership without changing page markup, API contracts, +permissions, visual design, or user interaction. The build-free deployment model is retained. + +## Page Module Runtime + +`static/pages/runtime.js` owns the page lifecycle registry. Each feature registers its views in +`static/pages//page.js` and declares named enter and leave actions. The application +injects the existing feature functions into that runtime, so page modules do not reach into +another feature's state or DOM. + +The lifecycle boundary now owns: + +- page-specific data loading after a successful shell mount; +- member-aware entry for Screener, Mentor, and Wentian; +- auction timer cleanup when leaving Auction; +- canvas, dust, and performance cleanup when leaving Wentian; +- the internal Screener Tracking view's ownership relationship. + +`openView` is now a generic coordinator. It validates the route, asks the page runtime to leave +the previous page, mounts through the shared shell, and enters the next page. It contains no +page-name branch chain. + +## Shared Components + +`static/shared/components.js` is the common rendering boundary for small, stable DOM patterns. +The first migrated component is the empty state used across market rotation, themes, +Dragon-Tiger, review, Screener, Wentian history, alerts, entity details, and administration. +It centralizes escaping and class composition while preserving the exact existing markup. + +Collection rendering and text assignment are exposed for later incremental migrations. They +remain dependency-free and use `XiaobaiUI` for safe escaping. + +## Enforcement + +Frontend boundary tests verify that: + +- shared components load after UI primitives and before page code; +- the page runtime loads before every feature registration and before `app.js`; +- every public and internal workspace belongs to exactly one feature page module; +- `openView` contains no feature-specific view comparisons; +- shared empty-state rendering is used by multiple feature families; +- provider requests still exit only through `shared/api.js`. + +## Compatibility and Residual Risk + +Feature renderers and event handlers still reside in `app.js`; moving them all at once would +create a high-risk rewrite across already accepted workflows. The new lifecycle and component +boundaries let those functions move feature by feature later without changing navigation or +loading behavior. Dedicated mobile composition remains the next governance phase. diff --git a/docs/maintenance/人工维护指南.md b/docs/maintenance/人工维护指南.md new file mode 100644 index 0000000..f58f78d --- /dev/null +++ b/docs/maintenance/人工维护指南.md @@ -0,0 +1,76 @@ +# 小白复盘人工维护指南 + +## 1. 正式边界 + +`app/`是唯一正式源码和运行目录。父目录旧程序与失败的`next/`不属于应用依赖,也不得作为后续 +实现来源。产品规格位于`docs/product/`,历史迁移证据位于`docs/migration/`。 + +## 2. 目录定位 + +```text +server.py 进程入口 +backend/bootstrap/ 配置、依赖组装和启动 +backend/http/ 鉴权、响应和公共HTTP能力 +backend/features/ 按产品领域组织的服务、路由和Repository +backend/data/ 数据网关、质量规则和供应商适配 +backend/database/ SQLite连接、迁移和Repository组合 +backend/jobs/ 后台任务、状态、锁与重试 +backend/llm/ 模型选择、鉴权、额度、流式和审计 +frontend/shared/ API、状态、Shell和公共组件 +frontend/pages/ 页面结构、行为和页面样式 +config/ 页面、功能、API、任务和数据字段注册表 +data/ 正式数据库和私有数据,不进入Git +runtime/ 日志、PID、缓存和测试产物,不进入Git +tests/ 单元、契约、边界和浏览器回归 +tools/ 启动、注册表生成和统一验收工具 +``` + +## 3. 本地启动 + +```powershell +cd app +python -m pip install -r requirements.txt +powershell -ExecutionPolicy Bypass -File tools/start_local.ps1 -Port 8797 +``` + +日志、PID和Python缓存写入`runtime/`。前台启动可使用: + +```powershell +python server.py --host 127.0.0.1 --port 8797 +``` + +## 4. 修改流程 + +1. 阅读`AGENTS.md`、`ARCHITECTURE.md`、相关注册表和测试。 +2. 找到职责唯一所有者,不建立转发层或临时补丁文件。 +3. 保持API、数据库、权限、数据口径和用户可见行为兼容。 +4. 行情字段必须登记来源、时间、单位、复权、新鲜度和降级规则。 +5. 用户私有数据必须包含并按`user_id`隔离。 +6. 先运行领域测试,再运行统一验收,最后做真实浏览器检查。 + +## 5. 自动验收 + +```powershell +python tools/verify_baseline.py +python tools/verify_baseline.py --e2e +``` + +统一验收覆盖全部Python测试、API与架构注册表、JavaScript语法、Git空白检查和SQLite只读完整性; +`--e2e`额外运行Playwright。前端改动还需人工检查日间/夜间、1080P/4K、移动端、滚动、弹窗、 +图表、问师流式结果和问天动画。 + +## 6. 数据与密钥 + +- 正式数据库固定为`data/review.db`。 +- `.env`中的`APP_ENCRYPTION_KEY`必须与数据库成对备份。 +- 不要复制正在写入的SQLite文件;停服或使用SQLite backup API。 +- `.env`、Token、密码、数据库、私有Skill和运行日志不得提交Git或写入Docker镜像。 +- 同一时刻只允许一个正式实例写主库。 + +## 7. 部署与回退 + +Docker以当前目录为构建上下文,持久化挂载`./data:/app/data`。升级前保存当前Git提交、数据库一致性 +备份和`.env`;升级后验证健康、登录、最近交易日、私有数据、数据源、LLM和关键写入流程。 + +出现问题时先停止新进程,保存故障日志和数据库副本,再恢复上一Git提交及其成对数据库和`.env`。 +不要使用破坏性Git命令覆盖未提交数据。 diff --git a/docs/migration/README.md b/docs/migration/README.md new file mode 100644 index 0000000..addee67 --- /dev/null +++ b/docs/migration/README.md @@ -0,0 +1,13 @@ +# 迁移文档入口 + +后续恢复迁移工作时按以下顺序读取,禁止从历史阶段文档直接继续: + +1. [`../../AGENTS.md`](../../AGENTS.md):仓库级不可违反约束。 +2. [`原版保真迁移总纲.md`](原版保真迁移总纲.md):当前唯一有效的迁移方法。 +3. [`保真迁移状态.json`](保真迁移状态.json):机器可读当前状态和下一步。 +4. [`保真迁移账本.md`](保真迁移账本.md):连续检查点、资产处置和决策记录。 +5. [`next失败冻结记录.md`](next失败冻结记录.md):失败实现的隔离边界。 +6. [`人工维护与本地切换指南.md`](人工维护与本地切换指南.md):迁移版目录、验证、数据边界、人工验收、切换与回退。 +7. [`evidence/slice-11/README.md`](evidence/slice-11/README.md):当前候选的试删审计和全量自动验收结果。 + +`重建迁移章程.md`及`next/`内阶段文档均是失败过程历史记录,不再指导后续实施。 diff --git a/docs/migration/evidence/slice-00/README.md b/docs/migration/evidence/slice-00/README.md new file mode 100644 index 0000000..afa71f3 --- /dev/null +++ b/docs/migration/evidence/slice-00/README.md @@ -0,0 +1,34 @@ +# 切片00:原样可运行副本 + +## 范围 + +- 原版基线:`41329943c4878fc09ed82ec376eb93ab151e4092` +- 目标目录:`app/` +- 数据库:使用SQLite在线备份生成`app/data/review.db`,不写原版数据库。 +- 排除:冻结的`next/`、密钥、正式数据库、日志、缓存、构建产物。 + +## 自动证据 + +| 检查 | 结果 | +|---|---| +| 原版与目标源文件SHA-256 | 628项一致,0项差异 | +| Python测试 | 231项通过 | +| Playwright测试 | 45项通过 | +| 数据库结构 | 36张表一致 | +| 数据库行数 | 2,830,708行一致 | +| SQLite完整性 | `ok` | +| 真实服务 | `http://127.0.0.1:8785/api/health`返回`ok` | +| 真实登录 | 管理员账号登录成功,默认进入情绪周期 | + +## 视觉证据 + +- `app-exact-light-1920x1080.png` +- `app-exact-dark-1920x1080.png` +- `app-exact-light-390x844.png` +- `app-exact-dark-390x844.png` + +四个视口均使用真实服务、数据库副本和原版前端资产。1920与390宽度下没有页面横向溢出。 + +## 结论 + +`app/`当前是原版的可独立运行副本,不包含来自`next/`的产品实现,也尚未进行业务拆分。 diff --git a/docs/migration/evidence/slice-00/app-exact-dark-1920x1080.png b/docs/migration/evidence/slice-00/app-exact-dark-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8b67b1c3e22c3baf1ca5abb36cf84c68a09982 GIT binary patch literal 119623 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 F{{@LjZ{z>~ literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-00/app-exact-light-1920x1080.png b/docs/migration/evidence/slice-00/app-exact-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2ec13e9094f3d069bdef4b7d264647a23fe03a GIT binary patch literal 106354 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

^FBX6T`7xIeWBFOX#7}+LB|qyy$=OB5=0`RU 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 BA5Z`Q literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-00/app-exact-light-390x844.png b/docs/migration/evidence/slice-00/app-exact-light-390x844.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2df28edbee5df8bb1d5a074e24a1c1b5c50e25 GIT binary patch literal 34472 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-01/README.md b/docs/migration/evidence/slice-01/README.md new file mode 100644 index 0000000..5e7b27a --- /dev/null +++ b/docs/migration/evidence/slice-01/README.md @@ -0,0 +1,57 @@ +# 切片 01:启动、HTTP、账号、会员与系统管理 + +> 基线:`4083dce`(切片 00 原样可运行副本) +> 回档标签:`xiaobai-preservation-slice-01-20260731` +> 结论:自动差分通过;前端运行资产未改动,仍等待最终全站人工验收 + +## 1. 本次范围 + +本切片只整理原版 `app/` 副本中的启动、通用 HTTP、账号、会员和系统管理实现。所有实现均从 +原文件机械移动,原导入面由兼容外壳保持;没有从冻结的 `next/` 复制产品代码,也没有重新设计 +页面、接口或数据结构。 + +| 原位置 | 新的唯一实现位置 | 兼容方式 | +|---|---|---| +| `app/server.py` 的进程组装与完整应用服务 | `app/backend/application.py`、`app/backend/bootstrap/runtime.py` | `app/server.py` 继续导出原符号并保持原启动命令 | +| `app/server.py` 的 Cookie、鉴权、CSRF、静态文件和 JSON 传输 | `app/backend/http/handler.py` | `RequestHandler` 组合 `HttpTransportMixin` | +| `app/server.py` 的账号与会员 HTTP 方法 | `app/backend/features/accounts/http.py` | `RequestHandler` 组合 `AccountHttpMixin` | +| `app/server.py` 的系统管理 HTTP 方法 | `app/backend/features/system/http.py` | `RequestHandler` 组合 `SystemHttpMixin` | +| `app/server.py` 的账号、会员和出生信息业务方法 | `app/backend/features/accounts/service.py` | `DashboardService` 委托 `AccountService` | +| `app/database.py` 的账号、会话、会员与用户凭据方法 | `app/backend/features/accounts/repository.py` | `ReviewDatabase` 组合 `AccountRepositoryMixin` | +| `app/database.py` 的系统设置存取方法 | `app/backend/features/system/repository.py` | `ReviewDatabase` 组合 `SystemSettingsRepositoryMixin` | +| `app/security.py` | `app/backend/features/accounts/security.py` | 根文件保留原导出 | +| `app/app_config.py` | `app/backend/bootstrap/config.py` | 根文件保留原导出 | + +## 2. 不变量与差分证据 + +- API:`config/api.config.json` 与 `app/config/api.config.json` 的 SHA-256 相同;路由路径、方法、 + 访问角色、状态码和错误载荷由原注册表与全量测试继续约束。 +- 数据库:原版和迁移副本均为 36 张业务表、62 个 schema 对象,规范化 schema SHA-256 均为 + `0615a0423856d0eb02bccd81a071840bd50d6563da96d556cec49967ad8a5f4c`。 +- 账号边界:注册、登录、会话、密码、会员和出生信息使用临时数据库执行同一原版契约,5 项专项 + 测试全部通过。 +- 前端:本切片没有修改 `app/static/`;`index.html`、`app.js`、`styles.css` 与根目录原版对应文件 + 哈希相同。`app-light-1920x1080.png` 保存本切片运行截图。 +- 兼容:原 `python server.py` 命令以及测试和外部模块使用的 `server.DashboardService`、 + `server.RequestHandler`、`server.SERVICE`、`server.automatic_screener_jobs` 均保持可用。 + +## 3. 验证结果 + +| 验证 | 结果 | +|---|---:| +| `python -m unittest discover -s tests -q` | 236 项通过 | +| `python -m unittest tests.test_preservation_slice_accounts -v` | 5 项通过 | +| `npx playwright test --reporter=dot` | 45 项通过 | +| `python -m compileall -q ...` | 通过 | +| `git diff --check` | 通过(仅 Git 的 CRLF 提示) | + +Playwright 在自行创建 Python 静态服务器时存在 Windows 子进程退出等待问题;验证时预先启动 +`127.0.0.1:8876` 静态服务器并由 Playwright 复用,45 项用例在 143 秒内正常返回退出码 0。 + +## 4. 保留与待处理 + +- `app/backend/application.py` 仍包含其余尚未迁移切片的原版实现,这是刻意保留,不是本切片遗漏。 +- `app/server.py`、`app/app_config.py`、`app/security.py` 和 `app/database.py` 的兼容面须等所有消费者 + 完成归位后再评估;本阶段禁止删除。 +- 没有删除任何不确定代码,没有修改正式根目录数据库,也没有切换 Docker/NAS。 + diff --git a/docs/migration/evidence/slice-01/app-light-1920x1080.png b/docs/migration/evidence/slice-01/app-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7c6f1472edbd1f04892c2be88a4123af620064 GIT binary patch literal 78754 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 Ag8%>k literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-02/README.md b/docs/migration/evidence/slice-02/README.md new file mode 100644 index 0000000..6134016 --- /dev/null +++ b/docs/migration/evidence/slice-02/README.md @@ -0,0 +1,61 @@ +# 切片 02:公共行情、搜索、详情、图表与数据网关 + +> 基线:`4002f09`(切片 01) +> 回档标签:`xiaobai-preservation-slice-02-20260731` +> 结论:源码、API、数据库、真实页面和浏览器回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片从原版副本机械移动公共行情纵向链路,没有从 `next/` 取用代码,也没有修改计算逻辑。 + +| 原位置 | 新的唯一实现位置 | 原位置兼容 | +|---|---|---| +| `app/backend/application.py` 的 30 个总览、搜索、详情、图表方法 | `app/backend/features/market/service.py` | `DashboardService` 继承 `MarketServiceMixin` | +| `app/database.py` 的 11 个行情快照、搜索目录、同步记录方法 | `app/backend/features/market/repository.py` | `ReviewDatabase` 继承 `MarketRepositoryMixin` | +| `app/tushare_client.py` | `app/backend/data/providers/tushare_client.py` | 根模块为同一模块对象的兼容别名 | +| `app/ifind_client.py` | `app/backend/data/providers/ifind_client.py` | 根模块为同一模块对象的兼容别名 | +| `app/realtime_aggregator.py` | `app/backend/data/realtime.py` | 根模块为同一模块对象的兼容别名 | +| `app/chart_data_provider.py` | `app/backend/features/market/charts.py` | 根模块为同一模块对象的兼容别名 | + +`app/tools/move_class_methods.py` 使用 Python AST 确定方法及装饰器的源码边界,只移动原文本片段。 +该工具会在缺失方法、目标标记不唯一或源码无法解析时停止,供后续切片继续复用。 + +## 2. 等价证据 + +- `test_preservation_slice_market.py` 对 30 个业务方法和 11 个 Repository 方法逐项执行无位置信息 + AST 比较,全部与根目录原版 `server.py`、`database.py` 完全相同。 +- Tushare、iFinD 和实时观察器文件与原版 SHA-256 完全相同;图表模块全部类和函数 AST 与原版相同, + 仅内部导入改为新规范位置。 +- 四个根级兼容模块与新模块共享同一类对象,旧导入和旧 monkeypatch 路径继续有效。 +- `config/api.config.json`、API路径、鉴权角色、错误结构和数据库 schema 未修改。 +- `app/static/` 未修改;七个核心 HTML/JS/CSS 文件哈希继续与原版相同。 +- `app-light-1280x720.png` 为真实 `8785` 服务完成载入后的日间模式截图,SHA-256 为 + `a7ee1b682f68c418d792727dbc4534d7494dae4f4811cdbba208bd86dcf25d10`。 + +## 3. 真实运行检查 + +- 迁移副本:`http://127.0.0.1:8785/`,管理员登录成功。 +- 总览:返回 2026-07-30 Tushare 已缓存行情,涨停 56 只。 +- 搜索:搜索“中国平安”返回 `601318`,点击后打开完整个股详情、日 K、资金流、事件逻辑和复盘笔记。 +- 页面:1280px 视口无横向溢出,数据加载状态正常,浏览器控制台 0 个错误。 +- 分时:迁移版与原版在当前本机网络环境均返回同一个 `Intraday chart request failed`,因此记录为 + 既存外部接口状态,不是本切片差异;没有擅自增加降级或改变来源策略。 + +## 4. 自动验证 + +| 验证 | 结果 | +|---|---:| +| `python -m unittest discover -s tests -q` | 241 项通过 | +| `python -m unittest tests.test_preservation_slice_market -q` | 6 项通过 | +| 行情、图表、实时与数据库专项集合 | 61 项通过 | +| `npx playwright test --reporter=dot` | 45 项通过 | +| `python -m compileall -q ...` | 通过 | +| `git diff --check` | 通过 | + +## 5. 保留边界 + +- 情绪计算仍在 `application.py`,切片 03 再归位;行情服务只通过继承调用,没有复制。 +- 竞价、题材、人气、龙虎榜和问天对公共行情客户端的调用仍可通过兼容别名工作,待各自切片迁移。 +- 根级四个数据模块、`DashboardService` 和 `ReviewDatabase` 的兼容面在所有消费者完成迁移前保留。 +- 没有删除待定代码、没有改动根目录正式数据库、没有切换 Docker/NAS。 + diff --git a/docs/migration/evidence/slice-02/app-light-1280x720.png b/docs/migration/evidence/slice-02/app-light-1280x720.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdd8ed2a085ebe1c08a1939126ed19369b06a16 GIT binary patch literal 94270 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 z
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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-03/README.md b/docs/migration/evidence/slice-03/README.md new file mode 100644 index 0000000..91b469c --- /dev/null +++ b/docs/migration/evidence/slice-03/README.md @@ -0,0 +1,66 @@ +# 切片 03:情绪周期、五类股池与涨停表现 + +> 基线:`a426432`(切片 02) +> 回档标签:`xiaobai-preservation-slice-03-20260731` +> 结论:源码、API、数据库、真实页面和浏览器回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片只移动原版副本中的真实实现,没有从 `next/` 取用代码,也没有改写情绪公式、股池数据、 +原因补全、表格、样式或交互。 + +| 原位置 | 新的唯一实现位置 | 原位置兼容 | +|---|---|---| +| `app/backend/application.py` 的 2 个情绪服务方法 | `app/backend/features/sentiment/service.py` | `DashboardService` 继承 `SentimentServiceMixin` | +| `app/backend/application.py` 的 6 个股池原因及事件补全方法 | `app/backend/features/pools/service.py` | `DashboardService` 继承 `PoolServiceMixin` | +| `app/database.py` 的 2 个原因覆盖方法 | `app/backend/features/pools/repository.py` | `ReviewDatabase` 继承 `PoolRepositoryMixin` | +| `app/sentiment_engine.py` | `app/backend/features/sentiment/engine.py` | 根模块为同一模块对象的兼容别名 | + +五类股池、涨停梯队和涨停表现仍由切片 02 已归位的原 Tushare 总览实现生成,本切片没有建立第二套 +计算或数据来源。 + +## 2. 等价证据 + +- `test_preservation_slice_sentiment_pools.py` 对 8 个业务方法和 2 个 Repository 方法逐项执行无位置 + 信息 AST 比较,全部与根目录原版 `server.py`、`database.py` 完全相同。 +- 新的情绪引擎文件与原版 `sentiment_engine.py` SHA-256 完全相同;根级兼容模块与新模块是同一模块对象。 +- 已归位的应用、行情服务、Tushare Provider、演示数据和选股模块直接导入新的唯一实现;Tushare + Provider 仅调整该导入,其全部类和函数 AST 继续与原版一致。 +- 原版 `8784` 与迁移版 `8785` 在相同账号、日期和数据库副本上请求 `/api/dashboard` 与 + `/api/sentiment/history`,JSON 状态、字段、值和顺序完全相同。 +- 2026-07-30 的同请求结果均为:涨停 56、炸板 23、跌停 83、昨日涨停 81、情绪历史 20 日。 +- 原版和迁移版数据库均为 62 个 schema 对象,schema 哈希均为 + `17918327f8b919496e6630458293f9f777c7c24662625bb3fc0b64ff0a8fbeef`。 +- `config/api.config.json`、API 路径、鉴权和 `app/static/` 未修改。 +- `app-light-1920x1080.png` 是真实迁移服务载入完成后的情绪周期页面,SHA-256 为 + `e387417abbe0667e00875a8d4061b5546748ecf2452a692d06d078d516330dab`。 + +## 3. 真实运行检查 + +- 迁移副本:`http://127.0.0.1:8785/`,管理员会话与缓存行情载入正常。 +- 情绪周期:20 个连续交易日、当前阶段、评分构成和交易日明细均完整显示。 +- 股池:涨停池 56 行、炸板池 23 行、跌停池 83 行、昨日涨停 81 行。 +- 涨停表现:四档晋级率、市场宽度和今日结论均显示原版结果。 +- 1920×1080 下六个页面横向溢出均为 0;日间、夜间背景与面板状态正常;浏览器控制台无迁移错误。 + +## 4. 自动验证 + +| 验证 | 结果 | +|---|---:| +| `python -m unittest discover -s tests -q` | 248 项通过 | +| `python -m unittest tests.test_preservation_slice_sentiment_pools -q` | 6 项通过 | +| 情绪、总览、缓存、iFinD 与前端契约专项集合 | 48 项通过 | +| `npx.cmd playwright test --reporter=dot` | 45 项通过 | +| `python -m compileall -q ...` | 通过 | +| `git diff --check` | 通过 | + +Windows 下由 Playwright 自行创建临时静态服务器时,45 项完成后子进程无法回收;改为预先启动同一个 +`8876` 静态服务器并让 Playwright 复用后,测试以零退出码正常结束,结果为 `45 passed (2.1m)`。 + +## 5. 保留边界 + +- 板块轮动仍调用情绪历史公共函数,待切片 04 与市场天梯一并归位。 +- 竞价、题材、人气和龙虎榜对股池数据的消费保持原调用路径,待切片 05 迁移。 +- 根级情绪引擎兼容模块、`DashboardService` 与 `ReviewDatabase` 兼容面继续保留;数据库内尚未迁移的 + 选股统计方法仍走兼容别名,待切片 06 随完整方法一并归位。 +- 没有删除待定代码、没有改动根目录正式数据库、没有切换 Docker/NAS。 diff --git a/docs/migration/evidence/slice-03/app-light-1920x1080.png b/docs/migration/evidence/slice-03/app-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..987c2cf5c7ece351ca40248376e14ffb9cf4f5a6 GIT binary patch literal 154636 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%0A&UC&63clQZ3%&u7#L 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 基线:`b3555d2`(切片 03) +> 回档标签:`xiaobai-preservation-slice-04-20260731` +> 结论:源码、API、真实页面和浏览器回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片从原版副本机械移动板块轮动服务,没有从 `next/` 取用代码,也没有修改天梯、轮动的计算、 +排序、展开、配色、页面结构或交互。 + +| 原位置 | 新的唯一实现位置 | 原位置兼容 | +|---|---|---| +| `app/backend/application.py` 的 2 个轮动方法 | `app/backend/features/rotation/service.py` | `DashboardService` 继承 `RotationServiceMixin` | +| Tushare Provider 的天梯与轮动构造函数 | 保持 `app/backend/data/providers/tushare_client.py` | 切片 02 已归位的公共数据实现 | + +市场天梯没有独立后端 API 或第二套计算,直接展示 `/api/dashboard` 中原 Tushare 实现生成的 +`ladders`;因此没有为目录形式建立空的天梯服务。 + +## 2. 等价证据 + +- `test_preservation_slice_ladder_rotation.py` 对 2 个轮动服务方法逐项执行无位置信息 AST 比较, + 全部与根目录原版 `server.py` 完全相同。 +- `_build_ladders` 与 `_build_sector_rotation` 两个原数据构造函数的 AST 与根目录原版完全相同。 +- 原版 `8784` 与迁移版 `8785` 在相同账号、日期和数据库副本上返回的天梯数据及 9 日轮动历史 + JSON 逐字段完全相同。 +- 成分股接口在当前外部网络状态下两版均返回 HTTP 400、`bad_request` 和相同的 + `该板块成分股暂不可用:Tushare request failed:`,没有改变错误或增加静默降级。 +- `config/api.config.json`、API 路径、鉴权、数据库 schema 和 `app/static/` 未修改。 + +## 3. 真实运行检查 + +- 市场天梯:8 个层级(含断层)、18 个首屏股票单元格、3 个结构分析模块正常;1920×1080 下 + 页面宽度无溢出,首板展开入口保留。 +- 板块轮动:9 个交易日、每日 Top 12 共 108 个板块单元格、由远到近/由近到远两个排序入口正常; + 1920×1080 下页面宽度无溢出并保持全页滚动。 +- 日间模式页面控制台没有错误或警告。 +- `app-light-ladder-1920x1080.png` SHA-256: + `9e57d18d92e745fd92131f7bf08f21faaaa745476dd942cdaa2a703b9a7a303a`。 +- `app-light-rotation-1920x1080.png` SHA-256: + `03c092bb40bd0eb672136dff853abffc87e9790840107c2f22e6cf31d5f83c09`。 + +## 4. 自动验证 + +| 验证 | 结果 | +|---|---:| +| `python -m unittest discover -s tests -q` | 252 项通过 | +| `python -m unittest tests.test_preservation_slice_ladder_rotation -q` | 4 项通过 | +| 切片 02 至 04 与总览缓存专项集合 | 24 项通过 | +| `npx.cmd playwright test --reporter=dot` | 45 项通过 | +| `git diff --check` | 通过 | + +## 5. 保留边界 + +- 成分股接口依赖的日行情与因子持久化方法仍由原 `ReviewDatabase` 提供,因其同时服务智能选股, + 待切片 06 随完整共享职责归位。 +- 天梯和轮动前端资产保持原位,切片 10 再按页面职责归档;当前没有复制或改写。 +- 没有删除待定代码、没有改动根目录正式数据库、没有切换 Docker/NAS。 diff --git a/docs/migration/evidence/slice-04/app-light-ladder-1920x1080.png b/docs/migration/evidence/slice-04/app-light-ladder-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..a3ddc25a7ca07b43b03f3b3e21777d6897e1e0a2 GIT binary patch literal 142220 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%0DvUD%8!rs*MCE)I9 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

La+VG{qIC_ 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-04/app-light-rotation-1920x1080.png b/docs/migration/evidence/slice-04/app-light-rotation-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..344b8216dae59b58a2aebac392b4988ebea0ad3a GIT binary patch literal 202888 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 基线:`814e757`(切片 04) +> 回档标签:`xiaobai-preservation-slice-05-20260731` +> 结论:源码、API、数据库、真实页面和全量回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片没有从`next/`取用代码,也没有重写计算、页面或接口。集合竞价、题材库和人气热榜原本 +共享`MarketInsightsService`,其中竞价候选会直接调用人气榜热度数据,因此整体移动到公共行情 +领域,避免拆出互相复制的实现;各页面入口仍按功能目录归位。 + +| 原位置 | 新的唯一实现位置 | 兼容方式 | +|---|---|---| +| `app/market_insights.py` | `app/backend/features/market/insights.py` | 根级模块导出同一类对象 | +| `DashboardService`竞价入口 | `app/backend/features/auction/service.py` | `AuctionServiceMixin` | +| `DashboardService`题材入口 | `app/backend/features/themes/service.py` | `ThemeServiceMixin` | +| `DashboardService`人气入口 | `app/backend/features/popularity/service.py` | `PopularityServiceMixin` | +| `DashboardService`龙虎榜及游资档案 | `app/backend/features/dragon_tiger/service.py` | `DragonTigerServiceMixin` | +| 竞价、人气、龙虎榜持久化方法 | 对应功能目录的`repository.py` | `ReviewDatabase`继承原接口 | + +Tushare Provider 中`hot_money_profiles`与`dragon_tiger`继续保持切片02归位的唯一实现,没有为目录 +形式再制造一套数据构造逻辑。 + +## 2. 源码与接口等价 + +- `test_preservation_slice_market_insights.py`逐项比较22个市场洞察方法、8个页面服务方法、7个 + Repository方法和2个Tushare方法,全部与根目录原版无位置信息AST一致。 +- `DashboardService`与`ReviewDatabase`不再重复保留已移动方法;根级`market_insights`与新模块 + 暴露同一个`MarketInsightsService`类对象。 +- 原版`8784`和迁移版`8785`使用同一数据库的独立副本,集合竞价、题材库、题材详情、人气热榜、 + 龙虎榜、游资档案和席位别名共7个真实API状态码及JSON一致。 +- 题材详情在当前外部网络条件下两版均返回HTTP 400;差分只排除每次请求随机生成的 + `request_id`,错误码与错误内容仍完全一致。 +- 完整接口摘要见`api-diff.json`。 + +## 3. 数据库差分 + +- 两个副本均为62个schema对象,哈希均为 + `60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1`。 +- `auction_factors` 511914行、`popularity_factors` 232行、`lhb_institution_daily` 47行、 + `seat_aliases` 0行、`stock_master` 5535行均逐行一致。 +- 完整表计数与哈希见`database-diff.json`;运行数据库副本已在验收后删除,未提交凭据或正式数据。 + +## 4. 真实浏览器检查 + +- 1920×1080日间模式检查集合竞价、题材库、人气热榜和龙虎榜四页;均无横向溢出,控制台无 + 错误或警告。 +- 集合竞价载入30行重点候选;题材库载入394个题材及选中题材成分股;人气热榜载入3个摘要 + 模块和200行综合榜;龙虎榜按当前缓存显示既有不可用空态。 +- 四页HTML、主JS、CSS及各自页面JS与根目录原版字节哈希一致。 +- 截图SHA-256: + - `app-light-auction-1920x1080.png`:`8065086c8f2b360aeb1004bd60429f3e2d7f1b8c872ec4a965e9a5d0c016b915` + - `app-light-themes-1920x1080.png`:`80e1e41101497ee7213e1dadfaa4c9572a1c47b3495edd09e36745ccdb639402` + - `app-light-popularity-1920x1080.png`:`614d6b7770f4e9ec72c059ab8a4129486df9eff5c4dd7e8279cc68ebcb80a36b` + - `app-light-dragon-tiger-1920x1080.png`:`2f1e2ad3a9bc3874c73bae884fc8744177cef354c7176559da1453fab1f85993` + +## 5. 自动验证与保留边界 + +| 验证 | 结果 | +|---|---:| +| `python -m unittest discover -s tests -q` | 258项通过 | +| `python -m unittest tests.test_preservation_slice_market_insights -q` | 6项通过 | +| `npx.cmd playwright test --reporter=dot` | 45项通过 | +| `git diff --check` | 通过 | + +- 竞价、人气和龙虎榜因子同时服务切片06智能选股,迁移后仍由`ReviewDatabase`原方法名暴露。 +- 前端资产保持原位置,切片10再按页面职责归档;本切片没有改DOM、CSS、动画或交互。 +- 没有删除待定代码、没有修改根目录正式数据库、没有切换Docker/NAS。 diff --git a/docs/migration/evidence/slice-05/api-diff.json b/docs/migration/evidence/slice-05/api-diff.json new file mode 100644 index 0000000..2f8827d --- /dev/null +++ b/docs/migration/evidence/slice-05/api-diff.json @@ -0,0 +1,61 @@ +{ + "all_equal": true, + "endpoints": [ + { + "endpoint": "/api/auction?trade_date=2026-07-29", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "523144cc14d876577b7d518cdf38fd2722b13a8f01ed5d2e20dcc38f6a2624ce", + "migrated_sha256": "523144cc14d876577b7d518cdf38fd2722b13a8f01ed5d2e20dcc38f6a2624ce", + "equal": true + }, + { + "endpoint": "/api/themes?trade_date=2026-07-29", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "95c2ad418f18d877d94ec2a71fe6fafd5e329b069d87a9300f7fcac92d4ba5d1", + "migrated_sha256": "95c2ad418f18d877d94ec2a71fe6fafd5e329b069d87a9300f7fcac92d4ba5d1", + "equal": true + }, + { + "endpoint": "/api/themes/detail?code=885001.TI&trade_date=2026-07-29", + "original_status": 400, + "migrated_status": 400, + "original_sha256": "b11a3314b172d3ad6ba28d969fcd6a9a2a4b49e7d29ed804496a4dfecd2a364a", + "migrated_sha256": "b11a3314b172d3ad6ba28d969fcd6a9a2a4b49e7d29ed804496a4dfecd2a364a", + "equal": true + }, + { + "endpoint": "/api/popularity?trade_date=2026-07-29", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "e62a93c41f7c3f95c3d47f8ccaedaa809563c8dd65c04dd54b164f73e6014e94", + "migrated_sha256": "e62a93c41f7c3f95c3d47f8ccaedaa809563c8dd65c04dd54b164f73e6014e94", + "equal": true + }, + { + "endpoint": "/api/dragon-tiger?trade_date=2026-07-29", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "a3998b935377d5fd0673ec5b9214d1b0a64680d155c61e6cff49d0d5fcf0e843", + "migrated_sha256": "a3998b935377d5fd0673ec5b9214d1b0a64680d155c61e6cff49d0d5fcf0e843", + "equal": true + }, + { + "endpoint": "/api/dragon-tiger/profiles", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "dfb1e534c018ec12fd8d8ee0e7fe0f234e73dc7715d7f0a948f74ef8d12d779a", + "migrated_sha256": "dfb1e534c018ec12fd8d8ee0e7fe0f234e73dc7715d7f0a948f74ef8d12d779a", + "equal": true + }, + { + "endpoint": "/api/seat-aliases", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "2b0fb0a6b3e353c69158d61221c2200e4199d0d60dd0b9d99702a22eaa917a78", + "migrated_sha256": "2b0fb0a6b3e353c69158d61221c2200e4199d0d60dd0b9d99702a22eaa917a78", + "equal": true + } + ] +} diff --git a/docs/migration/evidence/slice-05/app-light-auction-1920x1080.png b/docs/migration/evidence/slice-05/app-light-auction-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..c98baa77e29f331f27b5387b57428c155e996eda GIT binary patch literal 165864 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

h#QLxY3W@4q3e#?Ek+ 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

G)P`CYvU`;4Egkj4Wrd(NJZhwgZf>LVLj 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�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
c_Z{$2cpVr8^9QBNOVWuYDg-oDByYJq`ef5e$9 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 RZ~sA2@c*fIdG&MY{{YCr^hE#w literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-05/database-diff.json b/docs/migration/evidence/slice-05/database-diff.json new file mode 100644 index 0000000..f1aefd5 --- /dev/null +++ b/docs/migration/evidence/slice-05/database-diff.json @@ -0,0 +1,51 @@ +{ + "all_equal": true, + "schema": { + "object_count": 62, + "original_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "migrated_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "equal": true + }, + "tables": [ + { + "table": "auction_factors", + "original_count": 511914, + "migrated_count": 511914, + "original_sha256": "3d0470787adaf7c4cf5f15f5ad9fa1d67c8fcd4807285ac264eeacdcf5054cd1", + "migrated_sha256": "3d0470787adaf7c4cf5f15f5ad9fa1d67c8fcd4807285ac264eeacdcf5054cd1", + "equal": true + }, + { + "table": "popularity_factors", + "original_count": 232, + "migrated_count": 232, + "original_sha256": "3f4c61a13ceaa1ed9ecb28f86241a8a478a6757d6a44b46f432f73c0226bba7f", + "migrated_sha256": "3f4c61a13ceaa1ed9ecb28f86241a8a478a6757d6a44b46f432f73c0226bba7f", + "equal": true + }, + { + "table": "lhb_institution_daily", + "original_count": 47, + "migrated_count": 47, + "original_sha256": "1f847eac34d2ba576b429da208667f3b67b591d36ee66800803605bbc447970c", + "migrated_sha256": "1f847eac34d2ba576b429da208667f3b67b591d36ee66800803605bbc447970c", + "equal": true + }, + { + "table": "seat_aliases", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true + }, + { + "table": "stock_master", + "original_count": 5535, + "migrated_count": 5535, + "original_sha256": "8656e2d189d3520433fb3552e17998e4bf17bcf6838403cddc6719282b23e792", + "migrated_sha256": "8656e2d189d3520433fb3552e17998e4bf17bcf6838403cddc6719282b23e792", + "equal": true + } + ] +} diff --git a/docs/migration/evidence/slice-06/README.md b/docs/migration/evidence/slice-06/README.md new file mode 100644 index 0000000..fde53b3 --- /dev/null +++ b/docs/migration/evidence/slice-06/README.md @@ -0,0 +1,69 @@ +# 切片 06:智能选股、自定义选股与策略持续跟踪 + +> 基线:`cf2aad2`(切片 05) +> 回档标签:`xiaobai-preservation-slice-06-20260731` +> 结论:源码、API、数据库、真实页面和全量回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片只机械移动原版选股实现,没有从`next/`取用代码,也没有改写策略、因子、权重、排序、 +盘后候选或跟踪逻辑。 + +| 原位置 | 新的唯一实现位置 | 兼容方式 | +|---|---|---| +| `app/screener.py` | `app/backend/features/screener/engine.py` | 根级模块指向同一模块对象 | +| `app/advanced_strategies.py` | `app/backend/features/screener/strategies.py` | 根级模块指向同一模块对象 | +| `app/llm_strategy.py` | `app/backend/features/screener/compiler.py` | 根级模块指向同一模块对象 | +| `DashboardService`选股入口 | `app/backend/features/screener/service.py` | `ScreenerServiceMixin` | +| `ReviewDatabase`选股持久化方法 | `app/backend/features/screener/repository.py` | `ScreenerRepositoryMixin` | +| 原策略持续跟踪服务 | `app/backend/features/screener/tracking.py` | 容器直接导入唯一实现 | + +四个同时服务公共行情与选股的方法归入`MarketRepositoryMixin`,没有复制第二套实现: +`upsert_stock_master`、`list_stock_master`、`upsert_daily_bars`、`daily_bars_for_date`。 + +## 2. 源码与接口等价 + +- `test_preservation_slice_screener.py`逐项验证选股引擎、29套策略定义、自然语言策略编译器、 + 13个服务方法、25个选股持久化方法和跟踪服务与原版等价。 +- 三个根级兼容模块与正式模块暴露同一模块及类对象;原类不再重复保留已移动方法。 +- 原版与迁移版的`/api/screener/setup`、`/api/screener/tracking`和`/api/screener/run` + 状态码及业务JSON一致。 +- 差分仅规范化策略启动刷新和顺序执行必然变化的数组顺序与`updated_at`;其他字段仍逐项比较。 +- 请求与差分结果见`api-requests.json`和`api-diff.json`。 + +## 3. 数据库差分 + +- 两个临时副本均为62个schema对象,结构完全一致。 +- 13张关键表逐行一致,覆盖约143万条日线、77万条技术指标和51万条竞价因子。 +- `screener_runs`两边均为251行;会话和运行时间戳只在临时副本内规范化。 +- 正式`data/review.db`和`app/data/review.db`未写入测试策略、测试会话或差分时间戳。 +- 完整表计数与哈希见`database-diff.json`。 + +## 4. 真实浏览器检查 + +- 已登录迁移版真实服务,分别检查阶段选股、策略选股、自定义选股和策略持续跟踪。 +- 阶段选股显示退潮、置信度92%、匹配策略和262日因子就绪状态;策略选股载入29套策略。 +- 自定义选股保留因子权重、过滤条件、公式入口、手动执行和独立候选结果。 +- 跟踪页只展示手动加入的候选,批次、标的、T+1/T+3进度、胜率和移除操作均正常。 +- 各检查状态无横向溢出、无加载遮罩残留,浏览器控制台无错误。 +- 截图SHA-256: + - `curated-screener.jpg`:`529ecd0947b34b42eb63d166c6804b0041e26fa362a171e4d0d7b584e073c05e` + - `custom-screener.jpg`:`7f31f50d44bc63a488277be0a74232e2ac256779d0accda42b96cc1eef88cc6e` + - `tracking.jpg`:`b19b1bc0cd4a98c29500917676bdcc4cc9a430a0c72dea8aff1110ad911db6e3` + +## 5. 自动验证与保留边界 + +| 验证 | 结果 | +|---|---:| +| 原版`python -m unittest discover -s tests -q` | 231项通过 | +| 迁移版`python -m unittest discover -s tests -q` | 265项通过 | +| `python -m unittest tests.test_preservation_slice_screener -q` | 7项通过 | +| `npx.cmd playwright test --reporter=dot` | 45项通过 | +| `git diff --check` | 通过 | + +- Windows下由Playwright自行创建静态服务器时存在子进程不退出的测试基线问题;复用独立的8876 + 测试服务器后45项用例在2.1分钟内通过并正常返回退出码0。 +- 选股引擎保留原版数据客户端依赖,边界测试将其与普通页面Service区分;后续只可在不改变行为且有 + 独立差分证据时治理该依赖。 +- 前端资产保持原位置,切片10再按页面职责归档;本切片没有改DOM、CSS、动画或交互。 +- 没有删除待定代码、没有修改正式数据库、没有切换Docker/NAS。 diff --git a/docs/migration/evidence/slice-06/api-diff.json b/docs/migration/evidence/slice-06/api-diff.json new file mode 100644 index 0000000..2bfd963 --- /dev/null +++ b/docs/migration/evidence/slice-06/api-diff.json @@ -0,0 +1,38 @@ +{ + "all_equal": true, + "endpoints": [ + { + "name": "盘后自动候选与策略库", + "method": "GET", + "endpoint": "/api/screener/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "e33a10e94accda4948c2af53887ea97736697f588ee1a92f561aa5c4bb28c2fd", + "migrated_sha256": "e33a10e94accda4948c2af53887ea97736697f588ee1a92f561aa5c4bb28c2fd", + "equal": true, + "first_difference": null + }, + { + "name": "策略持续跟踪", + "method": "GET", + "endpoint": "/api/screener/tracking?limit=12", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "f4476f53152b6a2ce01f2918da5999246cfd0ad7d0b71e80fdea8fa59c7456c2", + "migrated_sha256": "f4476f53152b6a2ce01f2918da5999246cfd0ad7d0b71e80fdea8fa59c7456c2", + "equal": true, + "first_difference": null + }, + { + "name": "自定义选股执行", + "method": "POST", + "endpoint": "/api/screener/run", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "b3866e7d270aa222bd2bad0c0276b7e81ccd48e5f3a75941a32ef8e559a92c7b", + "migrated_sha256": "b3866e7d270aa222bd2bad0c0276b7e81ccd48e5f3a75941a32ef8e559a92c7b", + "equal": true, + "first_difference": null + } + ] +} diff --git a/docs/migration/evidence/slice-06/api-requests.json b/docs/migration/evidence/slice-06/api-requests.json new file mode 100644 index 0000000..bc38631 --- /dev/null +++ b/docs/migration/evidence/slice-06/api-requests.json @@ -0,0 +1,59 @@ +[ + { + "name": "盘后自动候选与策略库", + "method": "GET", + "endpoint": "/api/screener/setup?trade_date=2026-07-30", + "sort_lists": { + "$.strategies": "id" + }, + "exclude_paths": [ + "$.strategies[].updated_at" + ] + }, + { + "name": "策略持续跟踪", + "method": "GET", + "endpoint": "/api/screener/tracking?limit=12" + }, + { + "name": "自定义选股执行", + "method": "POST", + "endpoint": "/api/screener/run", + "exclude_paths": [ + "$.result.meta.updated_at" + ], + "payload": { + "trade_date": "2026-07-30", + "regime": "retreat", + "strategy_name": "保真迁移差分策略", + "mode": "quant", + "run_backtest": false, + "formula": { + "meta": { + "library": "quant", + "category": "量化公式" + }, + "universe": { + "exclude_st": true, + "listed_days_min": 120 + }, + "filters": [ + { + "field": "pct_chg", + "op": "between", + "value": [-2, 2] + } + ], + "score": [ + { + "field": "amount_billion", + "weight": 1, + "direction": "desc" + } + ], + "limit": 5, + "min_score": 0 + } + } + } +] diff --git a/docs/migration/evidence/slice-06/curated-screener.jpg b/docs/migration/evidence/slice-06/curated-screener.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bea9c714ac7e4610a5fe8d8952511b208d89e5c7 GIT binary patch literal 88654 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%0A~+qaQJm)IwqmwS=MZ+&J@SfZ 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-06/custom-screener.jpg b/docs/migration/evidence/slice-06/custom-screener.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c47d7674903fbca81021207f3af545e0f0e583f6 GIT binary patch literal 90695 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 基线:`4bab921`(切片 06) +> 回档标签:`xiaobai-preservation-slice-07-20260731` +> 结论:源码、API、数据库、Skill 资产、真实页面和全量回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片只移动原版问师、Skill 注册、模型访问与流式协议,没有从`next/`取用代码,也没有改写 +提示词、数据侧重、模型排序、权限、计次、回退或流式去重逻辑。 + +| 原位置 | 新的唯一实现位置 | 兼容方式 | +|---|---|---| +| `app/mentor_agent.py` | `app/backend/features/mentor/agent.py` | 根级模块指向同一模块对象 | +| `DashboardService`问师方法 | `app/backend/features/mentor/service.py` | `MentorServiceMixin` | +| 问师消息和偏好持久化 | `app/backend/features/mentor/repository.py` | `MentorRepositoryMixin` | +| 问师流式HTTP方法 | `app/backend/features/mentor/http.py` | `MentorHttpMixin` | +| `app/llm_stream.py` | `app/backend/llm/stream.py` | 根级模块指向同一模块对象 | +| `DashboardService`模型访问方法 | `app/backend/llm/service.py` | `LLMServiceMixin` | +| LLM调用审计持久化 | `app/backend/llm/repository.py` | `LLMAuditRepositoryMixin` | +| 旧个人模型HTTP兼容入口 | `app/backend/llm/http.py` | `LLMHttpMixin` | + +模型池的增删、主辅模型选择及会员每日额度仍由系统管理负责;`backend/llm`只负责解析当前可用模型、 +鉴权、计次、首段前回退、流式传输和调用审计,避免复制第二套系统设置逻辑。 + +## 2. 源码与 Skill 等价 + +- `mentor_agent.py`和`llm_stream.py`与原版文件SHA-256一致,根级兼容模块与正式模块为同一模块对象。 +- 8个问师服务方法、5个问师Repository方法、2个LLM审计Repository方法与原版无位置信息AST一致。 +- 21个LLM服务方法中19个与原版AST一致;`_platform_usage_today`及按用户查询的辅助方法保留切片01 + 已验证的用户边界适配,使会员管理可在不切换请求上下文的情况下显示每位用户当日用量。 +- 问师流式和旧模型HTTP方法仅把原全局`SERVICE`改为Mixin的`self.application_service`,响应状态、 + Content-Type、NDJSON事件、异常和断连处理不变。 +- 公开`游资skills`共190个文件,原版与迁移版逐路径、逐SHA-256比较,差异为0。 +- 私有“小白”Skill仍位于Git忽略的`data/private-mentor-skills`,未复制到公开目录或证据文件。 + +## 3. API与数据库差分 + +- 原版`8786`和迁移版`8787`使用同一数据库的独立副本。 +- `/api/mentors/setup`和按用户、模型、日期读取消息的API状态码及业务JSON完全一致。 +- 两版均为62个schema对象;`mentor_messages` 28行、`mentor_preferences` 45行、`llm_usage` 72行、 + `system_settings` 1行、`users` 3行,均逐行一致。 +- 接口证据见`api-requests.json`、`api-diff.json`,数据库证据见`database-diff.json`。 +- 差分只在系统临时目录的数据库副本上运行,登录会话和后台任务运行数据未纳入业务表比较;临时副本 + 已在验收后删除,正式数据库未写入测试消息或LLM调用记录。 + +## 4. 真实浏览器检查 + +- 迁移版真实服务载入24个思维模型,管理员可见私有“小白”,公开模型的A/B/C标签、简介和置顶按钮正常。 +- A级筛选显示13个模型;全部、A级、B级、C级、搜索、整理、清空对话、建议问题、输入框和发送按钮均存在。 +- 页面宽度与1280像素视口一致,无横向溢出;浏览器控制台无错误。 +- 浏览器不调用真实外部模型,防止模型容量和网络波动污染迁移结论;流式首段回退、输出后禁止切模、 + 完整快照去重和空响应处理由`test_llm_gateway`、`test_mentor_stream`与`test_llm_stream`覆盖。 +- 截图SHA-256: + - `mentor-all.jpg`:`9cda4d6896da6932b8e9db014eed4882359287d6999e2181af7d945ea6272bd9` + - `mentor-a-filter.jpg`:`5dca958d5edf7ab11767474a3c4405d4cb96029f7a1efb35fa8155c61c863984` + +## 5. 自动验证与保留边界 + +| 验证 | 结果 | +|---|---:| +| 原版`python -m unittest discover -s tests -q` | 231项通过 | +| 迁移版`python -m unittest discover -s tests -q` | 273项通过 | +| `python -m unittest tests.test_preservation_slice_mentor_llm -q` | 8项通过 | +| `npx.cmd playwright test --reporter=dot` | 45项通过 | +| `git diff --check` | 通过 | + +- `assistant_agent.py`属于切片09复盘助手,本切片不提前移动。 +- 问天的模型调用属于切片08,本切片只复用统一LLM网关,不移动问天业务。 +- 前端DOM、页面JS、CSS和移动端行为未改动,统一归档延至切片10。 +- 没有删除待定代码、没有修改正式数据库、没有切换Docker/NAS。 diff --git a/docs/migration/evidence/slice-07/api-diff.json b/docs/migration/evidence/slice-07/api-diff.json new file mode 100644 index 0000000..c5a5c19 --- /dev/null +++ b/docs/migration/evidence/slice-07/api-diff.json @@ -0,0 +1,27 @@ +{ + "all_equal": true, + "endpoints": [ + { + "name": "mentor setup and public skill catalog", + "method": "GET", + "endpoint": "/api/mentors/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "3a5bd83b58e849757664bbfe8cf54e704bc9a7682333deb8297212c488aa3ddc", + "migrated_sha256": "3a5bd83b58e849757664bbfe8cf54e704bc9a7682333deb8297212c488aa3ddc", + "equal": true, + "first_difference": null + }, + { + "name": "mentor messages scoped by user mentor and date", + "method": "GET", + "endpoint": "/api/mentors/messages?mentor_id=kobe92-perspective&trade_date=20260730", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "migrated_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "equal": true, + "first_difference": null + } + ] +} diff --git a/docs/migration/evidence/slice-07/api-requests.json b/docs/migration/evidence/slice-07/api-requests.json new file mode 100644 index 0000000..3ad8f8f --- /dev/null +++ b/docs/migration/evidence/slice-07/api-requests.json @@ -0,0 +1,14 @@ +[ + { + "name": "mentor setup and public skill catalog", + "method": "GET", + "endpoint": "/api/mentors/setup?trade_date=2026-07-30", + "payload": null + }, + { + "name": "mentor messages scoped by user mentor and date", + "method": "GET", + "endpoint": "/api/mentors/messages?mentor_id=kobe92-perspective&trade_date=20260730", + "payload": null + } +] diff --git a/docs/migration/evidence/slice-07/database-diff.json b/docs/migration/evidence/slice-07/database-diff.json new file mode 100644 index 0000000..daa2cb3 --- /dev/null +++ b/docs/migration/evidence/slice-07/database-diff.json @@ -0,0 +1,51 @@ +{ + "all_equal": true, + "schema": { + "object_count": 62, + "original_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "migrated_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "equal": true + }, + "tables": [ + { + "table": "mentor_messages", + "original_count": 28, + "migrated_count": 28, + "original_sha256": "b906b776d575ff6fe459b2aa0e8b396267feed36d3d85f7edd7947b284482aeb", + "migrated_sha256": "b906b776d575ff6fe459b2aa0e8b396267feed36d3d85f7edd7947b284482aeb", + "equal": true + }, + { + "table": "mentor_preferences", + "original_count": 45, + "migrated_count": 45, + "original_sha256": "c19c7d05e6745e4f1787d1eed5f39d7e555ec24f8e490b585c19158edc2505ec", + "migrated_sha256": "c19c7d05e6745e4f1787d1eed5f39d7e555ec24f8e490b585c19158edc2505ec", + "equal": true + }, + { + "table": "llm_usage", + "original_count": 72, + "migrated_count": 72, + "original_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "migrated_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "equal": true + }, + { + "table": "system_settings", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "migrated_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "equal": true + }, + { + "table": "users", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "migrated_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "equal": true + } + ] +} diff --git a/docs/migration/evidence/slice-07/mentor-a-filter.jpg b/docs/migration/evidence/slice-07/mentor-a-filter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd1d83a216e76660fdfc1b250b19b489bab94f99 GIT binary patch literal 84774 zcmeFYbx@p5w;(ma_tdxut01gfSfP4M{o|XXO03-xN zBt!%xBt#@+WTcmPu7{R8$-WVtitT|Mv6L0l<3sVjK|w4@U)ffdvPT1^3hg zApN78h<|kVUk?J@3;5@rzI=viz6QX-zko+TKtn`^LqJA`LxBT47qJkrDUonEm8is& zqj9;oRg8@7W3nbTknJ3Ns_>|Jf$yt3VfX|zJmPAOzPXdeM_&{+v zQ_q-5;Qr(J7u{#F&+~-*3>3h6Ci6@f4h0bz0shYla9A(ku_+Na#Sn40m5l6svL^7N zJ2%deaH+VIeXH|g z)Iu2IsPJcvQZ*P?Mv7J*Fans^7$K_rb^8_s+2}t!I*_2FCS?C|yU?{4y|LPY*AJat z=&Z$y=LyS;K?d@P_>W=^PvkdSIFim8|5pnKd&@6FaZSI|>2H)cMi zTcYL9rk;TzZcP+z1Tmg1R%+JxgTmApDYDM0978;%Ks&2r;#cZl*Dm!j_Xzl#dJ@TG zL?G8>$WgGvYmg4hZO`rI6M)d;G-nViC*ynH!EFkA$gG=Sa|m(3n6z-^#})0nWo_wQ zf@*Km-NuA9lXycyXIiy zfS2IRmW*O0G?PjJK{i-Ko2&Mb8`RG@RACsHTm}e!Qxz|VqepTP zBU01uXX%~l81~4=A59OHb9JM90(zb(NA=3(WD=$c3x2GEp;k&D3v6t?!nV(9E7H3Q z%WZ6Oe~(z{1RV@R(rrGN^`oMqprU#eej&RUrh{8pTF4fYo&Wx7)>;wno-L!~c*(-Z zN+5z5{4p9R&DRAApNL_P?>t31O71i*^&`lMMW1b|uI>IRB6N^76>^`7nS9n=xuNyR zgZH9d0A643VK!74dkV5lQnBW$Qa-)!Bo!y=)~^3*^g8{mh}6O88tWFnycveZ`n(^t z$xrd>YBL$50~VTBO`d$WItFiPEBPhmRYG?;o4K}%1m5hv@TT)$C%264S82HGiE69n zcA4D;H#UOA=FSk<9Uh3D0QXjYPk>)%k2Q0FLrn@5;&~-$Fm7`GWH;eVtVpE{&ZW%D z6Kgi!%~~Dy+9=S4hDa4LOx}PO09i$ep17bsBLH5r;&bCE2;JuRO+Dc zFsb>DMr|SDD&=g^7{tItH$U>Vw{lkCE&-+XMl)Q9q))Uz?Dz@L+O@IVPW}1;cm2fK70qB6J5MjX?7`G{#B7OS4sSaM$33Xu~t5HQCv(>Iz*XNp`79g@B-SjI%hJx zdp`a7mHk%L&kK~tx#YJPZwX{*8WC*X)#W%=CkNO0AP5DL%jT?vk=L#S{I1aXtjg`J z5oHtx(|zSTu%(-hSD0JB2KhEu>6xM`DQWDBW{3rSrWA;Q= zxI|$icLv+d6;A+jCW0qG?cE8;Fg}VaxwgVdA;4pylq_j^DTov=&A5!sYQ<`7u?&B3 zvwGtRP|ZoaV3_ihM#gHH;){|y8BA2hfcKrPA@v3 zE9yTo5Z96nCZdj$q?r=%MbSiKd2^MNz910P7BoAkz$u3VyzPvNk@+iB(AhVWh_*X`aR*x^{y90+MR%+`NDG zKH0#pJYr=o?*3t|WImtUKnW9@8C|Vbr&^B!0*W57Kn_9(eUptD&~xCJ-+9s8FfFaf z3Zr)@3k$XnMp9wflV7q=G=adaBL*Kbe@%Q*+C!>@+&?2 z&T2(BI@7JX7>QB<>Hbm=m6kp;bp@>T4soY;Jpt@{`ZR2Bz&km_un0Bp3e#rCulx}d zCnbsKFviUSN9z0lG3UlcejWl0#5zF__1|JnBt(4+!FygewYzEDAM4pL+t;#ZmAF+e z4@@KYnuYm)G=-G9<8&K@e#_2JC`SeMqUp|~I~PWGAl>zCWR1|DX{cJ^ebj_v1~j7v zXKFI;x@1LH1mP!YzE?1RgM7+YAL;;fOT9HU#mS8eDGpR^)(Ja_YUIZ%P{L?f&hf53 zUPX-!QX`d6+;~G^X7){frFv%w+N?bkwpFzLW2ZI^&Okulc;kx@HXaD7UQ>dX?!62Z#V zjXBZupzVo=fP94$eZa(>=^J`Yxx?%*m1>4pl9xzP%OhK$yurvIV>K-3j-(zwrv^`0 z3h+Bk2w~nA2<4X{cg6?a0>_$44if89krZI_g^xg_=xi62> zht4XU$YYSg-ru_gi<99Tqz#7;%J=l_z{+_n2u_w>;EljQRP# zp%J{F-j&;B-Cw={j=1Z=O3V6e=ho~NA2ZgxCyA5lBXPX&!Us@HKTb#bS2ikrY0-kJ>C~b6iQ?0*0wB{1&=}BQyuXi{(v`{pokD=oo#l^@3jqPCRe}xMmmF4 zjrM)%bc=v)HAdIn_vn?54$}C?McMm^w2{0B4Imay&G+NoIhyAyH|C`aE6w~PGkO@5 z_YE#p82Td?4*aqQUFRpwTmu`7mXsBF=pni|V+Z&2RA+h@B{Tn!#AGC>k&GSh^=v4#}L#}(V z2}H_fO_%dajJQsbfG2bQB2+m)M3*TN6GEMO@54SLJ4?I_l(H!`Ia0~b7}Sh{wz|LC&2VJo{d)Q*yQ!JT=%|HN#z=M}-E?PbIRa8^6Jj>(@*+Z8 zyoQYoj@uN*x)qGNEvaJYt0HMUI%|BPb9 zhb%rIl{f#hD6gaqrz>>akt0+d?A#hEJj!fIUO30A0-fJ6qaYDiOiT_HE zcyg0pcm_5jPxc`~23>$8=A_n~TfBMfLu?kA*a!6j^CM19aWz_NYMfzPsXcNe*bkd^ zsfdT;U~Xk&5&f8*5Zi`nV!`>< z0q*Z4Jo-EptiyZwi|d;6m=k1TN~!OZFhCcC%u5e4>wyGad~~;MNf`Yhydz%DmFgSB z!-_=ZkroyQR3(NcWrm z00gH0k=S-JV=9Ez!BkwbqCQZROx;7$x9yk#@?0qtemV8YVY_CXAJAoH;`?Fkp@6r8 zCoDH%f5k(GH%BKUXfDJ~nzhch$dPm;%R^}fKbm9*3?n|x7Nv;ZZ`1{n)M}O~U`5K% zQOnV|c!CT=vGcl3(`y=-VMty51lV(pwNW3&FM-FvK=j`=KC>J7`EKen68mA}uitby z(BRCO7H2IqFOpKm;kJlrpc%6+e-qSpI-Q3jf|qc$D!Vg~q>${a_rtDu;Eg3-5eG6c z7PwRU95BKCit{~4c_$2XfI18l;Bv&iwIu`y^2AeJVS$F45epC zYsQSTrY!0?+^LVuY;a0T1{&MB1e}} zgIiwMOH&+BRduMU7Ht~5J1nft)o z!DPF*&nf7%i5DM{Aj4b?0_DGo(rjwhs-NsYvnVf~XL1GVV`S#`SX!JnYM~);^x`XP zZtfAhSWU1Ov*klt=H;`skFI(USJSKJC9G$f{XS2VNi#jck6Ng?m7vbGef@b{cdg`o zqnrHKMeXq9NTQtHbbRVC^=WBozY!@q7k3i}V~*o3YVBDwySl&+H%Et!ytvo6?@?0@ zn02QnVm{=A1g_?3mA z_lFs(K$uT|kmMI-ZlVmLi`Sj)G597%-ug;IMGD%U@!b&HVc>@g*)z=26jvsis28(* zLgj=VGL&C6;T#*al%6d*SaART(&CGbU0}K~S(Q>WDH#V9X9#M8i|J@2anM#pX+9&4 z`YG4xup4NFDz#u0nkXr&E?h^|uAD?H3Y;P>M3P{VvZ?Pt&P%B>Q4_A-gPKh^pj-#Q&ZjkPjt?zGR-@575(5oNdC+u9LTu9-pgsG!WhnuugIdg+*5*?vsjU`Mp)Nj! zhex`=UaN1cVVg-e2-l5fv~(o!rqITZ+f|eNjn*hJ9q+Oo+Y+tl@IEjxSss874lanc zSa`#HT2}E9QXvow%oN12LnE-&c;Q{)yFRAhwpq75zbnY59ux79P=bD}nDUvMLRpV{?`x$9`J ze57R{*5zoYZscUFB4$6vy%aSP2&OJ%$|68`Q-_Qw7I0$aML4if%PCE!!`I~e;$)cJ z(8>;S!`1?qVi`spqg@aKOa{qub-|zLaO2C=?6=5C?Ew!l8lOa1h zAibO&t9~I8=Rk~7hru;`lMkuYFTO_?espjLTE-rH0$J`_7lpY*eh@=LE%*GCLL7jk zHr2@WX+>M+xhE2icBpQV;xc%6`~d*bOBY()Qxn6b>XB3YLOzA3#zeHE6&7O& z<})PUdlZw100nJ3w&pvo+kq zET8w#y9H*Z!PYZ;Pg9rt{^Am*?CzoqZj!GBaaGY`B+Fetmik&!P`>#ToH0)j0FU|b zyNZkTe24`Ki)kFn^NL}~&C#ozpbkMCdu?fK$JxOyIaA3w?-`$|xjm{F2Z;n164r-R-8DjN_6*%^+ z8!E!II?GFOjW?pLoo`=a^`aa3T2hda6;oGg!amYsCMsnGz~pPH1YA_MC4M*~YfqUo zBvk6ANE;I~yb3RO#-XbL zkvqEepp{d!@vAIv@k@Q~M6m*_!(Rrehr85;gQnj+)yYCd-&rd6`Va1T?G{HQoi4Ay zc!!6PzC=XLm8j+QGURsK5vMQ?>Cs>lE^At&AO~Huo>JH1a&6$g9^bI*)Wc%)h^W~D z50gFAXPBU^{%XVz6)DFtWb(=La>41hVXsgh03+%Y&0|zUh}-o0}WC{@Fz) zb~9sSK-v(wke+@SnmHnBYn{)#(Jg}xb*b)a(R!*E(n<(X!yR|IU`UF~YX?e;HQzZI z1>2u?Ec05{@Aps<*INHaUWo|RuirRF}KU1Ao9Y|`!|>%v+z;Iaq`hbucari+sO+I9?7*s z$J}w;t4or99T1BBsx%=YJN-(AIp5ms!wQ!HyJh#3_xtN(Z;VL%Zra?$kKN+mZ`g$s z&7FLO1?I&O6tcN(V3B<|Z=1FQxYc zV6>Y{N}q}}XRhaL|D6R@-n5&n)}%>~EGvv*AS4ubhGMlP+R-#N#)wjNS^){Li`G=e zXWlw@s|EH4P1&p(&`_klrRP6fM*$-o8QXN~gc$PHY3}HmDi8#0IoR`XWiU0#2@}r^ z!^@FQCB?ujTrl&5KtQJgl+_vI_!n*qB+cPvb};Z)Ojs(8E>sV?%K73JzR2?odF;aB zj1Aom1mi~wSe+A26vCXIQvW6>t4ZfYwW*^d3nl-69AhzM-3Cq@$lJo*zT6?RI{_`lt=0xRNf~yYjByj;5J;tirJFZ@gD}JByMq#`UaB0Hpu!j{(7|AaBSgsY`5)zE*T3}`UcV#cbe{zmo>9nXz$J| zrZKGmLCuW@!rhkNWcSuFJoah3)~0C0-IRSC1N)YlN~By%+(kPMiue@!yHV1Zd46W+ zr0>i*I>r1Y_SZ)bNDZiS-B-7q1xD>?Vu#DJ*<)@6T0zFP=#V#r_3VM-ddiHw99H7u z^Rs~jx;znl^lDagozIs_Zm|%fI}utuD=hbHPab2TJtLzLYeD`CJuYT@mFV&Z;SNrw zgJL@~^-U@*^p=p~0RwpXvs~BerExKhPoA03TN2fU%0ahcx)+;<1!c)mX&rtKmB%@e zpNPw=uy+_c$*WmIXkz`RW8?=zJ{YxHFo~a^7hD2J?pb&1(WtG!e_(zzNj6OhHIS$_#fRvY>Uf9{r%_EwK6q1L5`{t*JBRLjQjNMgK9Ve-vKq zMH@~|4KL^t!`t6z4=(>TvwzPQ;xIldTf+;~e~8-O67|<#UfSM^4YP2o|I!%^Us2Xg zUesrqTltCgAME-Y>A%QZ|N8zP;`=ww5;#DjonXA2KsjypiQv-YKV;VD-v#_{IsRMP z5t=qT^BOi~H1K_w+tjNY{=r=M48%~mNKTV~(fwoT{G%^w7PJfL1)u)t?(^R9H)_AY z2i19JD@Q!xT4iZ`YI)nP-z3zE_^~s?ULJE1LdOkI_#i@2TQcK(GVh;rQ?CEs_FKF3 zPI*D@)Rm@cf5YR(*6hARUG*9t&ap@T%b7NClwtmq2s#gUUf?^A%qMN_=+L z>CE4bfch0W9HZn`$;L1LK3d*$NA4jN#xa4W#PNQ@K5D`fq<<&y_ZIpW4@!9)G9>%d zFZedqNu|Q;YWwK*S*{xsPwv&Q_7x}x%tLaDnPXLyJ8+F2x zvEPV%PXMyDpZMo%BP|MNX{eLvlK*o9kNS!?oM=`%2Wd$W6cL%o+(?~#a(Xslk`T56WRfs45 z)xkjS-cb99mVW^Mr!(icJH?E2MhTG{6PyH7lfWGo$Tu2Md#%E;n;giiD)#aJFZe5H zn-mSJ;R(<^@H-ERi}CdlG3fD);t7Lr;&H{#7@Mwv`#N{o3!CcpU727J;eOFs_ z_^*3Q+#9)Djb8(N8z#TC+wxo*77VUv*8F2{EN`ujz3kHWpRXdf@AyZrSNr#fR()>< z)KoWBHlu+t*>)t%M60WOEIaz9HrBm-7A0(4$=XwN@#kJ!SioHia8rzX7Z z>8mSE<@p>vfnfnY&`mw)sQJ{uWk~1|XPwXej?q`pW1;twLuV6Tdzm<-QthmmhAua( zn}3i+?7}MUoH$Ch0UonoZB}hU;aIX~bl_QIcfYbt=;_y6@PTE_@@t+urhAc3x+S{$8r3EVtMtn;uq4QDATv}Al6Lwll2?d5+P?--u^FuAvrU zq?B~6#29v`QfmTiYd&LGtczV2&U^J4;SyfEv~mk|B@0g-&ew67H?j?-`J^qL3ct{$ zl?(Nnnv+yPvqP6^&d?B;swcKR;QFq|2t$El>t!_qpe##Ea%B;WLB`m|gcz!g{vSUj z?JxhNbWd$}&#y@_=IR58y!Lk5GABdyT~_r>KfX~DO{s0p7o*-mf<^+G^6CK*04$?n z_+DuKf-ajT$G#r(7Y8kPaXBf&eqZ+G^#39K{5}!Wq zo5WAnlP-0L>mQiVtCOs;!{wK>X+v?4vN{i$>GGn?idaWHvOAlCh|yvv1yf^Z)tB7K z)6Ct5OaHOlvnzBTXPaF%Kt-o}JFMu2u8yI}&Zc0Z&jiBKaOJtIr+-Ms4R(D(LRs&m z>~3q{zF#sU7{d->DgKyO9huQrL;WT5uQ$?zca#p5$?_?ek~KoX!bs^FN8eK5g+~%l z;F)#%s?w>030EakTWeiUt;MKj+jVaut8FHf@^dE6fYczF?TXhnKaGv zqpKV5goTn8P4<2A>-WCS=*TJ>A%;`DW}WMG9oEeALJlxyE&rX***6)iy|4?NAe}@q zGeqz)mhyL_jG=#lwg4&!t5dyu^9r7ccwUG83%4U>in*-r=*X%J{5SziRr2x8_2N9Z zr_aug_fq;fD#+21v>)rdk#tU$*%TU46X2hh8%jck4DYx@c%vqvd0<#toRUHuGdp~c z8-3BbY(eeme*>_9y4dND1$_Es6c$};$nza0G8R86(1V87)DvrTpsjT)jgeAJ6t0?E zZFN=CRKX_D-GLDCx$!a8p!|qvBd$k$Ve%$LTf50zq~PYn?BQLA+3~T;w4xGckLG)GuiFgiEN z%gZ$?tdU*wC#P*dS7B#r18!SRQR*_acHPoE8YU|92S>8bB=X}b82&E ze^k_7Y^BC1DUQjv)e~BZYgE`U%IhGgY^!U)1AR&44N#v|h1NEa2<607IQ?WIBiw&$ zOqNJVcYm|ghoH;qgrUT^h-%&}*w=L+W!8et?xkYeVLWDMEP3V$H{q<%UHCGNo5d>D zNq6?`NXtuB3R`5+x9b8dl`2zWT1u)5a`|bz z>}N0^9sl6Hqy0D^xGm!ZPmDqw>eQ^Er)+IgJU(^& z76YGZF_^~T0!S~}oK*L-hNr4`OoTd1P`~RQP%<=qosv@ZMdJ2!-XfuLWXzW&S+9a`rdy!rou2|H*s# zKTo&Go31T;4MkQjsHn=fu(K6h)35WomCL@Y#zU7!o2*NJa{rS8x#)f#$PXoc6qcdq zjD2LFFCyyMftd&TVt?mvs&IsC#S5)tcXV8ps2Z5S*hu2xtMJ)di8W?AG%pU0XN7EY z*u2^Nsk{CX42dw7{vcH7EwkP1p%4>`?Nd4P_84=RYaq_gm_JgC8IO)Aa8hBR=pH-N z_vD}@P(`8HXPO@~&&D^wN@zV24R%;kY>@@=U-@|S;cB{XUw)w8Pi<&3hd9s}T)Z8N zW95N0K9Mi2 zHQ;9D^;A9q;1e_?F&4e;&%4c{MB6nm^K$%*&ja38P0H>ye+A6Fm~Cd}ZxkpePJH2E zEHmMHpOL7dq0ALACM`b$J^+t$ugvn8S`f7Pm#e7*2S~J$F7mq;n-5#&e{BiPO?d3= zm;TA@)IZAO^uv^~^x<(!IuM)2M}OBH3k8?2s zOqN`CdRM3gQR|8?rWo79MsxD+&#a#SxY>mM2-Er5`AHuDt5Y99(anAnwi}%~h^(a8 zV>HGrQ^FrkiC@n)C}{JrOc9#-UwpXTc9+vLpP#>%%92T?+;&m9;2T#0lEUx^z21eT zxVi2WbIFm>*nJlRecw+eBjO`dK>OMSxj1}wGdl^t1zT3R5vLRjYOTc$FoU83(jC}` z@2A#F}FwwKjKz=yQ6xfvb#WkGI4N_s@V%gq@4 zYQbb;uGW>Fg~i5nSVsK7oN`&*RV#4~S$QU2H~8Hm{l+wGYWPA!h_aj|h7rag936*T z&u1w%C|^rK_Sktsb5mzKwRx#3qrMNyhlau1{v>%FJvw#2isCZ4z;%d1>F_KxufzkU z$5q}ViYU=}T(zCWMH}n?;BQ(4@Cx&2^!sgaK8MlQF5r-8*$~PeHw?uB<#tBmkap`% z@{VI^f#3ga70s$W2kuw>>~qfl^CnCjUXiA<{?N6{W0M1RU%svL83i=%Q0$`|=~|f*X-~Lao_Y9JZz>BCoal`TW;sNh?me` z#dewXLUl%hT#;6yiL}4fC$a2=Vu_D(x|s-UkvI5eJ`@fX$}_mR4%2m9-7zfeI$!kV ztLhO4VM)PNhQWIUJ;rt`eYck*eT2hM`d!?qW+1f5{w3_9G8rL~nq5M3hn24#d8tqb zQJ9x4O3U~eWSBEin%ie~&Y7HW z-k~wW!WPQFV?9q9=RGCK2rW2s5s2KC)soK>m-`xB7S*#kiQqeDmgYF6D0@|wWaa4m zAo(DK-B*Q|1p$b(q0yl&>Z3>8#C7_Y#kyMn6Ofg z|C|S6;g%2(2&zOSMzJW8)B&4-Kr3kqS)FBI#3pvi0b``HDrJ=S53HqSnJ;?|E(8wq zigPLwFlJQzc71$%OFjIgQ(wa%TX3EPcygh}Nl3#W9?d#^UirH4?(CEsNBP3wQx9Jb zqbgf4yRCIA+bcjDQ=~aZF`PUZe5N9TvJCSUbX4d^TVCEIf6QJgPLXgEVo0h|}M zkS<5E0SSwd<$+1dci6S1G?V%E=JY-e9xz$jHNh`@)KLqv5sTsCg@vZuVl)pPRDPsJ z>!eO@gmDqAWoXePPYzIju4Ho`u&V^1rN8h~s@8d@*M9p%wiAM-J4DL4R!PxU4BAImT0J4wjr0Uk|yDEz4vp?$+ zy1$eYEtxsN4B%(iqu%R%so}DyhI?uPSo(ouo&C)(0<^E4SuspR^eoW}=^J=4(AqgY!IV}=h!pAi!>(ZyGW#!R~@}s>*_UnzLE}r_V zZ<+P5+CE+lr7wI(T0BGysuVGBTVs7QvOaxBQRW>utv;hZOrMdRH$3_SiPx_e03aUc zL4&nLj&irjfd5@mZxD|{76lHq>NtYTZ9&9cMnkk2asf(7=w(e)&jF~3rhm49Se~Z= z%Nx~I(P!kJW7rRn-kJ4F8jlowB zJ7z@-EzMf^0jyRZpd&mv$paixO|NvTOzt|Yw*(rwxaSo`_v{vWxw3NmkA7MOT*9du z)siG-(LM0m^S>up?(FB!@1=(QJ{_hT#ayZ#VwvC?Y;0|z;fL_6iRX8iB z*>45tow=p?Jzxfs*R*4W1>80m%`6b{6l+E1*bYQsBxZJQVT47lormoyNrr9*a6NN4 z3WeFAPDnty*52q+F=%#DMw~j&|2mfU3xBBYGMQ*wlWsxKF0)gM1yxRAxd%^NSvP~l zA*9G8c+?{@VONT0mx!wtZ0q>ezozFlq#b3^Pf#qdY$Y)ft765`>nt_l^^x zF;vsXJ%$JIWAXeirt)Ickd(oNH}jhzww8jtzI19sC1E9J5mCdnIVeW|3nAI6fmO`a`)_d%mFH+=+`3 z!|zLk>nNMJwYcNqG~KwBJ}sg?t%m>5`(O0v=i=0I=n+LY{AR2!jw$fElRSLPc0SMq z3_m%RXhH3QxA;@sT|28mU%@TLrguDKZlk{2^GusUj9)Z1OUq(paxQfiUGfLe9}3JO zg``Of0$<5@*_ku&%qMUoEe(lj1S=`}PbmwQmp!62EhA%7S=(Q-o3+Lo<#-CJSl6dm zVx(KM*3A3U48#58nrhBxOnX`BP-+X6$G2s(tNc~!M$7^XiD|$ohWv=xL&A2~ zP*LQ3`H?$Y^?_=B=8FK0K-s>!3)w?;c?)tHt09u*(FPs>vWA2%31VG8$GtG*)w$rn z%Ro=`739w_X=)Rjon+rfe}2*v>v6TIllkuAlANsWWg`=e1Yc>?f=2A!;8Vh>4uB)m zn`tWrKDoEF>#tQN`B1yPEynOvoFh~7h3YQ&({0(JF9`Cr)lUN0PyN)!9NE-Ncd zj*?y2%yD=EG@69tLoR*XBY<>svx9WBRr3n8G&UtAW$ry@DCrwO-cN~%r#mM+*j61& za`W*n0v1KLOW2v%1*H&h9|n+z!)z*P^nNEpwVk)s`(UWk?fq`ff-teL%VwBE*3uII z6?bWE8Rc?&HNdI*V5od<#zE(gJLq%_!N2RAO6uy(S+z0E;nCl|0*_4sM(nl~HCF2g zy#(m!wQzYrI_qFGI#DBX8|8E2Z`N>Bpz5O~ZtJNB&EK+8JlX0)f;&=zk%`FcR1h!T0 zKs^a#Qtdj-DdMm%Ri zm!Mw*Ld|IEy1E8W;u?yxubMr)@p|fIWe3bNBDCxX4MAHG99lTJAO#%)-w!mYt36A_ zM;ekrpwq$%UcwA|Qip9p>~%B~xH1}&Dd6T#*AE+ZSu56~m#st4s%8B^OWLn_y+-~u z@)A^GRmmxHvc&6far|pKJK!mK{<46+O~Tr{9fpd+@|cX`l;TedKZL5aSggR26vF__ zw|pG=YuGD?R1DdFq=CNp^W{@Z-cd#Vhu=c+KW*z@FAe_XsyGV${`jAf0Od?Ef3)1H z!f1#{1nUHfOWYr7aG9ZoNZaTx7WRSQlaM8QTTukl@v`Q#uTt9UUcm*|7z@$X);jba zhmDAEYxgDc^XTsGzF)8kSeaUP&0 z#ZA*LQF$GmeXHt?Vl>i94L3Jy7(T*1$jOowLfLGu@mi_qT+JD8xavtw*M%N2g`NO1 zO_Um)Rha^k%R4QS!h6*OHg&n@Q1ekGX8~anqN_N)QI-8FS>iL4bHPTsbMvI#@8{0e zq~cAixJ%By-RN9{5O_NO8FZ=yX?PO(&~iBZb+5hWG-uDKy#!4Vfq=(U>t9$@9r%af zoPUufJVx8fE_X7U2MB<^$qc1^uhY{mQPM8aR3sxlsn4WXI**!R!l3uAglubs zdL!_PZO|ze^EX@}RL1V?e~~a|DgN~*AJkcR@jj{GqwGM?1~3o~kL)Usl+CD`&`K`l#fY6RRMB6^M8+2T%b=wK*%2e<~M0aN8?gd}$pCXvO*f94Z zsQ(GER&&UF=2n^KNJw8OwC2y4D7tK_5LP}PxyNy{@ACA&dhZ*O?R8qznk0=a@MB53 z>C1YG_P*56I5={U_Vx3mwzelqlr1vw9}}2CY!^!zca4}C!J!5jD$t!|C}N|V7n+Jj zWnFo9VJeP=Fdb^!71Hf{5E#_mcmMI!&JLy+f|N#(liiZX*lU=|ZlEYGFRytAuM

  • 1?SSvB=IAHc;dPmdlX0!Y1{i>3A%H5 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-07/mentor-all.jpg b/docs/migration/evidence/slice-07/mentor-all.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f85d30c86dd1eef22060e9b38a377a4f2c22255 GIT binary patch literal 84617 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

    cYTB#E z7kqho9>!32Nlmj~oq<12+<%{j(zKM#nUC;~5MsSz>TQXREx-;PLA8FPJds}fX{KwH z$h#=bR04n4XT8vq3f756CO+zv496>{TJD*h4sHsUzLgmA{I#}wY}cqt-Z>}jY^i4x zWeEdT@x!{3Nw8)Jk6<-_1MIIZ4bnw7cn!f2Z4QU_)*$t+F`WsXtKJyOZi}^+RS6j>6^V^);MIGlQ zxPk2LFA=EG2EM6CAjSvfG;RKhz?O@gkzW15c$<&`InB8P4ka%57 zC-%B3&{wx$z{G=%<3)I^wJBXk2L4Sm;>%UUpBj9J32JC#r?L1k=;@z|SzqD$4%;ok zg3U}W!|!^2Z^d|`k)FMMA53fJf*|wyrrs6ffGZA`?PBuDIeTzSTo#9jc?)ON*pb<8@hsq1u>0gFC!A=Q6{Y;UwCjBaO zmlkM&PBpl-4B0Z7y5UVOF4+hpo^D>01X}SrIw_7_E>Jdj87BL-B+`A`9QUxLT3@I; zIY&4TUMGMoR&T=x#b?{)QUj>E)n!;q@SPB+#a{Y4;Oa3TNS3S^m-|cZXmiY^m*>bm zeRJ3~S32=ehN6xN$!Z}l`ZBZ0Nnz6~vICTgz)$^s?#W@Cy#=K+#Zkor>FW2U;DrE8 zKlBZ|L}H-RHg?#tTUAS1%sWvXxQGSxJlbulZH=iu5_geyHWIkXu}~fW_SiHai18_F zw$tiHzgImRb4s|Wa%PJyYq;Oh!g`F!XoBGY8+=WzU`;~G^5B!BF0apH@D33U;onT~ zCPk{XoqBbIs-)r9Aa2SzZlJPF$h|Zn{Qf`$7JI{rN$t?&+%bR=p$wWC8R}M*(Vv3x zHM)C`@2>zF{6OUf#C!ke&rH3F$#@G(PALj#ug*Z|+w(aUZCFQYt=Hp7#9bYR-oi&! z(e?d2wL5C}VwGi5+Cu#by<%CJjJLNv9VBo!rVACLjCF!Ys+<_h)mmP`F>WudBC1ME zmut0y<6NLnS~VVfj=Qe+cPH24UWC)obwafY|Fzup0ogL~=<9*~Xcp(W``J-@K^8Yj za-^Q?X*rFy_d%^$%A$`XF5J4L@;iB2#_r9wjE9|{<0W0&o$Abb$DFAia#A=ChBri< zEy%f%=xpJ|WV!Opv&f6%YQo#XG~1Kl`Aj10lRqMcGOatM>bxb5!s}g{)%XXU$9Fxf;N455c3! zL5_j8K>E`$Or>d|WKjjg)YYrB^!iLczjFeT_(D@YZK8_)1&_Q(Z$;iItcB{5nhoWU z_`7nJX0U6(&z1B7O967v8^8=;{^YSy$`$^S(}e8o&;}Dqp=UU9x@QTSFs9}%kG`nX zq5?PbSzC>vBs|IgUD)+`v=J3foVu8- literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-08/README.md b/docs/migration/evidence/slice-08/README.md new file mode 100644 index 0000000..cbfe325 --- /dev/null +++ b/docs/migration/evidence/slice-08/README.md @@ -0,0 +1,69 @@ +# 切片 08:问天、观势、观气与观心 + +> 基线:`2919229`(切片 07) +> 回档标签:`xiaobai-preservation-slice-08-20260731` +> 结论:源码、API、数据库、真实页面、动画与全量回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片只移动原版问天 Agent、历法/卦象引擎、服务、持久化与三个 HTTP 入口,没有从 +`next/`取用代码,也没有改写六爻、安全门、五运六气、个人合参、铜钱起卦、历史去重或 +LLM 解读逻辑。 + +| 原位置 | 新的唯一实现位置 | 兼容方式 | +|---|---|---| +| `app/heaven_agent.py` | `app/backend/features/heaven/agent.py` | 根级模块指向同一模块对象 | +| `app/heaven_engine.py` | `app/backend/features/heaven/engine.py` | 根级模块指向同一模块对象 | +| `DashboardService`问天方法 | `app/backend/features/heaven/service.py` | `HeavenServiceMixin` | +| 问天历史持久化 | `app/backend/features/heaven/repository.py` | `HeavenRepositoryMixin` | +| 三个问天 POST 入口 | `app/backend/features/heaven/http.py` | `HeavenHttpMixin` | + +历法引擎搬迁后仍从`app/vendor`及`app/data/iching_zh.json`读取原资源;这是唯一资源路径适配, +顶层函数与类定义未变。旧测试依赖的根级模块继续有效。 + +## 2. 源码等价 + +- `heaven_agent.py`与原版文件 SHA-256 一致。 +- `heaven_engine.py`所有顶层函数和类与原版无位置信息 AST 一致。 +- 20个问天服务方法中19个与原版 AST 一致;`_heaven_reading_identity`仅将旧巨型类名 + `DashboardService`替换为已归位的`MarketServiceMixin`静态日期格式化方法。 +- 5个问天 Repository 方法与原版 AST 一致。 +- 三个 HTTP 方法只把全局`SERVICE`改为 Mixin 的`self.application_service`,状态码、字段和异常语义不变。 +- `DashboardService`、`ReviewDatabase`与`RequestHandler`不再重复保留已迁移实现。 + +## 3. API 与数据库差分 + +- 原版`8788`和迁移版`8789`使用同一正式数据库的两个临时副本。 +- 固定日期的问天初始化、三类历史读取、六爻成卦和个人五行计算共6个接口,状态码与业务 JSON 完全一致。 +- 未调用真实`/api/heaven/interpret`,避免外部模型波动及测试记录写入;提示词和调用链由源码等价与单元测试覆盖。 +- 两版均为62个 schema 对象;`heaven_readings`、`users`、`system_settings`、`llm_usage`、 + `user_birth_profiles`和`sector_phase_overrides`逐行一致。 +- 差分只在系统临时目录副本运行,正式数据库未写入问天记录或 LLM 用量。 + +## 4. 真实浏览器与动画检查 + +- 1920×1080视口逐页检查观势、观气、观心,无横向溢出,页面滚动边界可用。 +- 观势保留星空、三才六爻与八卦待载入场景;观气生成100个星点,五运六气环动画名为`wt-spin`, + 五行行业默认折叠;观心呼吸波纹、香火燃烧和阶段文字均持续运行。 +- 夜间模式问天背景为`rgb(11, 17, 32)`,全页无控制台错误。 +- 没有触发真实解势、解运或解卦调用,加载动画的静态资产及脚本未改动。 +- 截图 SHA-256: + - `heaven-trend-1080.png`:`9e70d9cbfd741e74d3c4511c0e76ef8e625a6a31fd5d6bde014103f807bcc76e` + - `heaven-fortune-1080.png`:`e4cdf0e0fc1d9325724654a781febed1d509e49ddccecb3355803b5e9f1d2f5c` + - `heaven-heart-breathing-1080.png`:`3493a59b9032c1a8a1ba7da609b499c736170d2c7947b3aa0ac4c8b95d981ff5` + - `heaven-heart-dark-1080.png`:`3d346fea6b593fa4e43037f5fc68eda1a3f3446a223c2022d9084922f646a088` + +## 5. 自动验证与保留边界 + +| 验证 | 结果 | +|---|---:| +| 原版`python -m unittest discover -s tests -q` | 231项通过 | +| 迁移版`python -m unittest discover -s tests -q` | 280项通过 | +| `python -m unittest tests.test_preservation_slice_heaven -q` | 7项通过 | +| `npx.cmd playwright test --reporter=dot` | 45项通过(2.2分钟) | +| `git diff --check` | 通过 | + +- 复盘助手、交易日志、自选、笔记与提醒属于切片09,本切片不提前移动。 +- 前端 DOM、页面 JS、CSS和移动端行为未改动,统一归档延至切片10。 +- `static/heaven-loading.js`是否失效仍不确定,继续保留到切片11试删。 +- 没有删除待定代码、没有修改正式数据库、没有测试或切换 Docker/NAS。 diff --git a/docs/migration/evidence/slice-08/api-diff.json b/docs/migration/evidence/slice-08/api-diff.json new file mode 100644 index 0000000..bfd0941 --- /dev/null +++ b/docs/migration/evidence/slice-08/api-diff.json @@ -0,0 +1,71 @@ +{ + "all_equal": true, + "endpoints": [ + { + "name": "heaven setup awaiting stock selection", + "method": "GET", + "endpoint": "/api/heaven/setup?trade_date=2026-07-29", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "b72f2e972c3993717d639d1ccc68a9f1fb716a5846823a485a05458103465b92", + "migrated_sha256": "b72f2e972c3993717d639d1ccc68a9f1fb716a5846823a485a05458103465b92", + "equal": true, + "first_difference": null + }, + { + "name": "trend interpretation history", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=trend&limit=20", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "2aa83ea177bd5cb2351ac4f3a60fdcd17e02cfc14b5753e157e515f03fc2c6c1", + "migrated_sha256": "2aa83ea177bd5cb2351ac4f3a60fdcd17e02cfc14b5753e157e515f03fc2c6c1", + "equal": true, + "first_difference": null + }, + { + "name": "fortune interpretation history", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=fortune&limit=20", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "e60debaad54c58ad34fc7f025bfeaba7d2349aee2531b3f507c6e1968dbdcbf0", + "migrated_sha256": "e60debaad54c58ad34fc7f025bfeaba7d2349aee2531b3f507c6e1968dbdcbf0", + "equal": true, + "first_difference": null + }, + { + "name": "heart interpretation history", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=heart&limit=20", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "1fe13531909c83c645b4fbb6740f46f2590adb346ab6e43414023967bb51b072", + "migrated_sha256": "1fe13531909c83c645b4fbb6740f46f2590adb346ab6e43414023967bb51b072", + "equal": true, + "first_difference": null + }, + { + "name": "six-line hexagram calculation", + "method": "POST", + "endpoint": "/api/heaven/hexagram", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "9773a9f288ea5fbe063b778fc47c613972fd7747f8fc6f80333316f33923c960", + "migrated_sha256": "9773a9f288ea5fbe063b778fc47c613972fd7747f8fc6f80333316f33923c960", + "equal": true, + "first_difference": null + }, + { + "name": "personal five-phase calculation", + "method": "POST", + "endpoint": "/api/heaven/personal", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "3b179ea4e3e0b43d12e929b4057a51264772fadcf41e5c87573dc5d18873bc9e", + "migrated_sha256": "3b179ea4e3e0b43d12e929b4057a51264772fadcf41e5c87573dc5d18873bc9e", + "equal": true, + "first_difference": null + } + ] +} diff --git a/docs/migration/evidence/slice-08/api-requests.json b/docs/migration/evidence/slice-08/api-requests.json new file mode 100644 index 0000000..9e94377 --- /dev/null +++ b/docs/migration/evidence/slice-08/api-requests.json @@ -0,0 +1,42 @@ +[ + { + "name": "heaven setup awaiting stock selection", + "method": "GET", + "endpoint": "/api/heaven/setup?trade_date=2026-07-29", + "payload": null + }, + { + "name": "trend interpretation history", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=trend&limit=20", + "payload": null + }, + { + "name": "fortune interpretation history", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=fortune&limit=20", + "payload": null + }, + { + "name": "heart interpretation history", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=heart&limit=20", + "payload": null + }, + { + "name": "six-line hexagram calculation", + "method": "POST", + "endpoint": "/api/heaven/hexagram", + "payload": { + "lines": [7, 8, 9, 6, 7, 8] + } + }, + { + "name": "personal five-phase calculation", + "method": "POST", + "endpoint": "/api/heaven/personal", + "payload": { + "trade_date": "2026-07-29" + } + } +] diff --git a/docs/migration/evidence/slice-08/database-diff.json b/docs/migration/evidence/slice-08/database-diff.json new file mode 100644 index 0000000..6258c71 --- /dev/null +++ b/docs/migration/evidence/slice-08/database-diff.json @@ -0,0 +1,59 @@ +{ + "all_equal": true, + "schema": { + "object_count": 62, + "original_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "migrated_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "equal": true + }, + "tables": [ + { + "table": "heaven_readings", + "original_count": 31, + "migrated_count": 31, + "original_sha256": "e6cfc86f010fb182d7522bb99e5d268e826f93896035172120df51a011590951", + "migrated_sha256": "e6cfc86f010fb182d7522bb99e5d268e826f93896035172120df51a011590951", + "equal": true + }, + { + "table": "users", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "migrated_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "equal": true + }, + { + "table": "system_settings", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "migrated_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "equal": true + }, + { + "table": "llm_usage", + "original_count": 72, + "migrated_count": 72, + "original_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "migrated_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "equal": true + }, + { + "table": "user_birth_profiles", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "2a74d4b2edd3a730a46f17fb6ab3926575c42662c1d968643b0d54586ab68b13", + "migrated_sha256": "2a74d4b2edd3a730a46f17fb6ab3926575c42662c1d968643b0d54586ab68b13", + "equal": true + }, + { + "table": "sector_phase_overrides", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true + } + ] +} diff --git a/docs/migration/evidence/slice-08/heaven-fortune-1080.png b/docs/migration/evidence/slice-08/heaven-fortune-1080.png new file mode 100644 index 0000000000000000000000000000000000000000..62ad91c80e577318e256564171dc289843e58709 GIT binary patch literal 107431 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�b7KQq$$gxA)qtbhoK)|wEkoFjReNY1mCRZ?!-O)XhX=Zlzwjpy% ztB+TX9uj>(P=(9B?#ppO-Ze(H9a_zi8VqW%7Xzq z>tLxD<0`fQPeE|oL*x(_>qWUmlCPw8%ihCCngkGtk8{8^C}S#^H@pewXmZ`s6!&CA zs-bofi@qZf!x9of6U1ov%ztdPMR=0j>|BwTRhdk{*viF)*zie{&x%i_)Mk~0m4WB3 zU4~_m%%ojNB@#W5sW=C+NQM%8Q(B>oZNv>?qYxvXVOms9^oMqC;3RF+UdiVSdibAm zBuX|+MJq)EdX#zRGHJFFWEWr0*#Y5;M`rt_t^~M4Mn7-FTz$$bDb8E^r5ei}5w{$7 z!~4~>#RI**WGjFCiG+EX(p>22zGYZPuh7ch1ty(HrLI4Q~D6J4eNFbm< z=$kDF2nYzFk*94LaR$k}yfGiLyOw1+O(V(Y&&Q8k7&bMUh4Avc*n$xzICHL|Ic512ZR(Co_<%d%R2Sx+}B*R?6$0It|DQ5 zbbiP^5iB1NDtSIwy6fYe-#&!s{FZyfb#(mj@6wO|pPo*o>PXPCPQG+GT=75KEU2>~ z>mJvob~Miavv>a2J|IN*??&cxPt}2iuv`Dpj&6giBnw#}bS5igB~awzt}-PkAc;sj zaLqYuIk(-d^8B&$q~Co7l_+nYC>04^l|Ar#$Mm9vedkBp{nYUfp&cE~?IJ-j5PP7i zbhq=Mz@fj^$UvWejp5(xUhbbiAfOIVdH#HG;OKEaE<<|53hv@cWAd1VZno zJ3BbyG(BB-)Xsd;4>4zbT^`GvMdwe;rnd7_M@fz*2;4W&IGC()Mn z#_?k)RF}>ITU9vz?rhpbph0e_r;#I<@p3V>i2QbtDMOa?k;4Zsyxw?pQ)-5WILVsam%il5|Qrw+_9@$SgsOAyg&w|EX(v^ zz{udaxKpT#;l7)BB1c3kw|m^@=Q*GFqo%hkZN^?}rsA9&SDN+HWR;iMg6YyTas;v2 zTWZ7#?OWrht?q};3j@@@U~o&B3aKp5Nn*Lr~bFPVnZ|0QK; zchXy*gv!e)0$7*~COQMlNfZMa%I##KIZpjvA13tusF?MeLtIqyFqf*dJn7aQsTaPJ zj@gb!AO~6UV6o$l)%Uo!rWLH)WG7`g-4TroJ>}(5V7h{rM&JVG)}u*y#x0($Czhef zb$UfS2ctIAbwm6&_>BOAqH$&;fY-79c3aqq2mQJH;_>*fUSb6)YPhL=j=hqEfDd3X z@9Abp`XLl=FpVy5f^QYF_LY*YD)Nu~d7mxrIKrVKaJMpS&>Z|^NJVG@X?{q*4YE4# z$n^8+<`OdR=vY?S1q_GIb*2`z(WW`P{`zkd>CU(g!ncyzfEx>@`>hPR6<|~+hYLXk zR&J-(@}HPx&|AD|`&r*OBCF7#2**Nwq0-(tMP@>VRFG)j8>cc=jR$Yw&MDc}Hx}fg z1=&!VXPC=&9bS16Y{RIho|jY}=o%}cM+jQjqFR*; zSKShQ#Lgk#>pGuaOe!se4?)9i?GYmU&yL3sQXD7Q`a3Jx@+^6oU`Te)4#1ZjZd#SN zBcP}K*ID)b{>;hBbJ&B;{5J040pDuI7l#7;;9gpGblPK4=KmW9^S_P+aE*ukDGmHo zwa&4Er&rG3238VnQXfyHMc)6n>zm$gLJ1u!>}qG*P*FxlIbNo;*dCG}O*hOcBI(_=mua$h^RfTxaE%oRV_>S*sAM@j@eGEl*^dvYTpb z;FAVN*orXKgwKMDANr9~+(@0+%jXicK$F#ICcD9?HOiWM* zyDn1?tTie;pf~-H5GmQ?x=|b*_?TXtXt5j)%e7`Pu;rC0lu0o-WwdGvv>w*f?EDoa zge@ru|82edQP|Z5dCSe3)EY6fWd-YKbF(0oEs0wi5N)y>LYd%Pu(+siPF6-Wv32^C z&sh{Iuw`g&`Xxpq0jVdw5|9D2>FW`ncKnRb{UOl&_(qLw-|qkqye6rRQ#37dwkA#_ zB$2G%Fm!PIrbu(*nUw?Ys$k6WzSXb`4o(=CzJQqi#tUdi-rqX`Z%brppEoUtF@`L! zh=bbVEKNX_(Jj00Ds)nYw%=F3s-gz?UMT}=6{hy%{WSGq2=kiW74MpB2KFDEt~C|; zfE7$ja5$OqjhVaf6@9sxnmOlam-G)~3nA8Y1Fuu*41Iep7k^#PSIq&I(9Y1-D5?H& zCbjYF)j;rgX|%+m4ss3T=z8y~<&~t(tOQ(Ih{a~CWL6^KY`T7@TH0hxb$+(+kROm< z*S5PMVEV&GqSC(VK#ejk=Q=eu6OaD3g{0$j@yy=gFz2PXMByQgdC}ye<$~^A;RPps zLXg`r549BCyghUTEK76n?;tcyUz3L_pN40ko$@}V&W7%rcRaqX$wwt*2bByL#%7$! zAG0uDgM(VHqzm2IzWr=|fbK#B_hxvZGHj^2bqx7-I+yqe2vl1f5;|(B-8Wl(U-rJh zspj(!o|0$gDo>EJ#H4s3sRBRz@bvH6*JkTzCIRz5H`XxF6nlq$V0Dl`tXD3e`Ebr)J-Y}Ou2S8b>dI_t zhBQ_O+XYaLB7!cJ9iyu_rG-uYeJ7g&FhBD)Yn@f;;W33p=z2OF8GWala@24(zePOn zRr8=j8;r1P_z-4Rnv$N!b$~C{j}}MXBSw4k78Obs(Uto^YBDWrrMF2uQA~#II>Nt^z9lSe*WWwqd^19N)?hn; zbmG(116TGE2jj?LBbMjRuP5`YAxm1jYBaC@(K=YwO}_<;iGa0Y zQl{rKg%>>H`)b6rG+|Xk!2>$BFE~U-r>X?v)#T)Qr~$oIGxNGd#k{5EnfA*HbDAQK>-}7S?YO#T#19Fe}V`F1k`L< zwJF;2su)xKo)u<9{Qbj?4*LTLzojcRj1_GGvw!lR@l0q zKbP$>v!?&{L&@O1AnVcp@R0wl&3-UdsOyVU`7T^~jrqr-e&~M%>_<}F9&g+nT9hLZ zMN4X(^eFEz$pG=aP1Lv%2tkRc+3i`G#CJZf^Iy9@zu|lR=o@g-d{*c3=H1(?FaR{B%x z3+>Oq;oQC-*I+XKDt-m%tMz-^kY>sIBj20Ee{TzPCunWit-Gon0=(RvdbDl1NU&R+ z^*_xEVni9nH{QAdHnx8a{r~L#!1pP^_qjoUR6X~JfCNyaWnw?`L@@FE!SC_{;36rb znv*G*Xu9T53n2t4B87?0KZ}v}9+9#g{#-n2x@L3i!%7qf<*jmU#zMg^` z)0EmqM31~FhXKB23nwkh<2`AqQPLGOMo^kffwOg`tt;99l0V3qjD9_NcDrWv>Mn?i z8`#x|D!A!I@m|ykLFHZ1WD!-Wa=Zuy@?>j=c2jorIN>nHR&D)thsuo9Z1~`|6vdN9Ij_EIpB~0dS8TgjmM4Nbb2a8W z>#NfqEV04eOS^+*WxCpH(Fux;vG(noca!gk)*OC<{+ye6y0^slj+TzkJg{Uq)OD?( z(V$w&_`dc0#P!{4gq)$uhRTIQqck0cmtSl+F@3tWARUn?opo}fJ%{Ip9Q6H4+q`~t zp2EjDL(>=mL8uc|Cd7=pqXAEpOq|Yz!=5*W_ml@3J`cP8Uf(zDCX|tDeq*4(w4cJl z5J;h+DV_ua8^ovT@qV7E9l@JG_ry{}>Q{y;tS&*y7rJL!4{=!Y=+{bQBJi>}WHc z(e$8Do}%ZbJon&c(pDC6DO@xMG8`B@6(12{0mc=Y)>y$F#HKmwIk(S@tu4QctbFTf zqHj>RV_a4lHi{q7_MxF=+Cm7jcdifsk}H5=-6TY z>#p@ZMddSgGz{NUn0~B}+{ce4Io?cKN_?Gl!&`Oh=j=N+n^iWHQ0G1-?@;FNW{?g< zwOsP&guZ5v>a`3nLe0}#)8AB#-b^;MM|6je{PL4}Q9+9BeUXiQ94*Zg5}CePT#=3@ z6k>4%li6sC<^CKk2_?u~MC`{fWx?F=)EnUFfi8|9Yb498Wr12 z&u_1Fw*AQ9$y2$Wzt)Ix_Wj$!1mnHP7cnX>-tO|RW=kB?eYxSqaZ8eBN$>GLjC-YM z-YL|#8GsDM5^3T}c_UN3jo8VI5#D6DFUOJP*8Wwi%OH1CWpe~pg>Oca$lKG_!6drq zNCZL(!~eJ*%$D|a0Z_KU`g8ori-pgafVxaCa_|87DZ%!9R{w=HwvUTnh@7~2t-Pqf$}3X~WJyylsPd1sEFRtKp;tr} zTCP6~!H1a*a@xCVJ?R|~D9ylK?9jw3@yWd&hBhGBi$u4#H@?>#yN;wq6gX}%`~Buy z%QF}p+#d4bhD~D&ako3&lRQ}7Kp9>15BG%Ny#sd$AHpNO1|BmYohP|NbxGd%z{DF1 z()%9eK1q%XXue$HJkKRJs*0SS`iDSM*x7K5r)iD3@6Eg{5y#|V4s%U(Uxhc zB)6i!rGIeMJ<~UD?0o;3J)41!N;+WaD+!fd0L%f zZ=yy*0XW#sI48$hAI~zKsEGh7CezER(2T%$Nivc zM6?i$WKjXfPhWzIS=884H~nF|w^sdT%fwsBi%^#q;bCt3Ic|@~4~f5p`7Z1im-U8A zMx`VdaweQPnTm0>o@SZmVj1SRxY^p11%c3|{Le$l+0a0~Jc2WKBvw-q8Z@=1&LMo( zn98y%_6f&EL=|&w2=4>+`Q-ANP3A6KbMc4v*-OSpG;ntD6ZZN3`!jfv% z%opP!PxC^D_c?V8yCC@Gahnu(LnZfy!FMhGa5y|sqpvs}TQ6Qsziw6050K4+U+|0O z(CS+tIpS_<qs>4e7`<67`*o4DOtiyAwRLG?Hr_8R8Y63b;eG>KN12kr8FdSNdEZ(TilVB6 zKLc@Fk1tN^ZSpXig?n(U%LjXND%T~+phrDA3ceT4w7ln919P|BfEoII!i?NlFSE7* z*l)#~cjNPJXTmUnQdEWQqALEquNM9D_!uhV&gXChxyx+ac54_q)d^#$F7XE)Bh-CC zMfs`Q1U?MYN&ox}q4jnX*CAL)xc!H~ivBydR8&@|uNcnh3@$M|to`nry_+8A`}?*O zmC@Z|;qGICwb=c%a*ywRvfi`YYX={hp$S}w_;gm^)%!pcT>w}XTs^A^gtb9Hd^-S1 z!GwKW+xZFBwL z^{P*SThjTX|DQiP{v8DOr(Wj2t@^}DY9GGBQs|F9+F@{dgyDjGhiw~JfDNo_I5?rx zDQB7L(V;5puy<*zao-TXzb-!^ZM;!5c9X-kL^5+^q|+6z{2?Gj`WpZ7A6Fs3vcv1H zsMpz`hFSWgM-J+LbJg;jtPrr!0d&$=RnA)o90QW@KiXLX_-grm3HW#j;!(&3;ZcXsYo(=%oKv_K+_-LdDY~~fiHjNt4~WA0hH(rE zs`wccZB{Ov@#3?wqw zdLb&x98uqwMJeWneYR0+iVSwDD$36~gBWPZyqmS72jBrLKU)tfFPbfqhNHXcD!|^m z%9Hu^1(in3D8kZ0f4l|b8s7{CDhB1wJ)ZYWPXGCd9o-OM09)Ccp_=d3Go2Vj&3CzyX6asT3DQ6}6}j$sKnGmWLLU8_7C_{eVlG z@2+uq``Tm29HcFMF%%CQY5suY{SJi1A?5MDu=$fFMK!iAV*1e~76sO}!rP+^e!ID9 z<>Px&Zia|!yaVyTvb5$X|Dxq+q2tgIYXdNpToL@LO+vYF$7mr0vcN4)3LGS39fzX3 zz}n%rFXW)EctG)Uk7Xi%8j^v?M-;s8*OGZ2m{7lev_rVCwdni;BLMj(^mgqT#evOp zIop{c6*Xiqbk(|nximiB4}q6Y$T%lCggQSr(pz6@yf`=n+g+h-GJW+nN;bYG5_*+| zqGWop3!MJdAUU{Y6MKftRA^l0$&u?le7Uc<2W70CayTb|8q>{Mma17fOGMe zmVzc#?uQ0ngFZyEU*Csv*01(!v-|qBWE!jGE3G;62 zBuFxfPH}q|gJHOF_otIrofsw$0>- z3-uXMp7ephB_l^fi5tVwy1JYtoknIVwOR}XCQJ0h$wl)ksGiW3rYTAn+m?O2Jf9|^ zYHjvK@6jwjr2#*A2LK4x7YL&p+xU95itQha z_6mdA${~lR>u2$E>(?u%!K+={)SIXZ%4}v39$pU%8>E2=ECk;guT@@;dmiC1$iPEG zG%1pOu>tw?irhW4Um0Ih-!iY$@%_r?Zb&6sMA7_IbwzqK)PFV&TeLgmrC##X9ysfd zT)kDYOJJh<*$@xv5~(92eNIwQJ$ajd?nYnuHK?SVCA1=K(*2e^L5-zR&(x_Cu1qdt!VQ>fd5iZGAX~T*&SvaqSU^&Vi2V;AMKOsWiweaM(f=R zkImCulyLTdoq(24c!XVxaEwZ?a9nwpcy15Ebgc{Be6yr!#5$xG>fc zNT)^XT2tZR%a24a3Rlb4o~q7)&W_UrWBm%v@|@(46}2KGC2{OCwHFsE49kGH-R=CuYqHg4U4dtEYVMgVud+0s*e+J;s8`!88m_F9h7r|n zl}{GZdNe)eUb{&J2PjSV-?oo@i57e~$-VH2$CtIKY)h4CHP2)dpEM{AyeST?EU)@4 zbbHO4WpS;gm4HHhZ%H}ss`6{_R zICLwmC&blic&jl?2&#*#t5sA1<(q1}dmz+$UEum{4TNoB2)wDhoGZLEHZ7ckinz>O zOwvBcyRyTxv5Ao)jL%0CnoHcxU)G%ys_y7jj^Mu%T0zP`MmH$ z6Bcp?j$J5PaiS7v1fv{FN%hKf;+cLnm0!|oJoPea@G zUliS0{)CS>^Lq1y`e3lOCTr1o)VT(CcImO0UIYemg^-?oc=oGfd=jbp;w8*Y`Odl* zgBWv4)`P{*hDwX8%bq$NXEF#-j5@JI&RJ1%A5WHGM>3hRe zY>mrv6HPp5!m*EjXm~r_x4w>Ww`_^SkPPJMl~aXBd|zGU-My)~$G3*f^Vu|zO=VUg zR4c>6Y=Z*a}~9)*{I~4D9O_Kl!pii zCxd4qB5&<=4_ggsFn-hbHBpaurk$^nx|vE1C(@yr%EpBuNYXSq%Z4iQhrmqQHY6>B z4k+5jN23mpwZErVZf~Q9Di01(EP68lFef-~)D`5-Fn%*GWAxgss?<|E%VZ+=Ov7LS z&RMZ0ff{vfc5v|YFuOczEp8fgFX1N1>4eX7r}=&9e(d7s{=y}rUkaaLQ(!%5p*-lZ zTZ$FdIO7J3&qC9yhB}ZM7;Qd{9gY!AV<)7Hn!5t!8`iPQq@a&!uD;rUgw=j+h7jai1&2RBT*2bA4 z>Cw2bH3vjC%QFq9_;MN;zV=(3@qyWNJK-(ms5PpYqV_gU5BY$PYus5gCb&_|@p9W7wkB$KlY93vgKQe{&{R!aXS zaN)T_+ntM20bGl#0Da2hxPZVZ$icIkfN%^1D98c`Po?Ui_4YTBwBwb+lVJbk(LQTD zU8D^(ovvB9D0Zq(!FIwH6(Zsas=>lM4BokW*F`;>`^`L3#%BUqJLb$E$N&;y1Y)Xu zhR$cgy}4xR1a=UHRwob0H$)V=m7)2Zl%>aQB|wizM5_go&)g&D8Abj?sr z{u=?m8$$>;r?zEc04-$56VP-lLh%>$_sR6J{L(5a!k!g^rw_1P%_!lUYszDgWsteC zKX)cegZQa^Ix-DiUDFr%1-o_UJqMrZU`N%}LHjfG;K$_Se=lg){K7LfH|WuWE5i-6 zR^!yzP zgDW>2s~k;Osgs2!lRplf^zZ90=kf$BM$9y-RmG6X*K?|5+}pxf1Kcq9VZ* z`AU?n;f@ZmZql=?-=v&2{)(V*DsxTR9Ha?_4FH(2w>! zjD?AlrpL{aSau9(tzT_*G&n4ucRhG3aBsGoRgsJ{qj&|mp8b8Gu%1+Sv^=XL zwh1Qq2&L){m`_-ZjabnUY99iKLdh-_N#+-?4XFAqT3aQIx|_v&vBBmZn%moX(=u>` zIAq;^YU6d+w^{<8!O3M+izohsRy<-s?R+C-A71VDw@U z$gCuTS~^!c;(JWxq;f@)rc#c{bQnA+*j5f=9pD4HG#=Uz8TMQS&lvI}r*4tg7do?= z0Y<{7_9JH?11hWK9UFm*W;TDDnyCm$&eojDPA3wkd)6;api0o&30}6NJt2>OSI|+Y zNWH{q>ek?GW6GFm3{cl>q<>k0ecMlN($QWE$MdFUCVohxcTfDp~m2nvk^&UD- z_WzbxC}y}ZouNv2JrFc@YkV6?57TX8g}MgzgxD^n32-5J5WvNE<3A#_>enKvuP z)6AYcwYC9F^KKk#Ptba{L$^>6DzRU3JkL$mav$ii4)Ee|wtc ze^mAq-!&1KN^PsElH;WejL;(|^ooz+Swz_f*Kcvu z0sY!cyOT>YPNf^#BVkc>4)4!XuPu;e#+}XUA-3GGal*I3sPS&;*5mqe^&)W1Mca7& zfDz)wGGSVC;-N)zn?nI~>WEFsfH@k4@KME`fb~sweRA4pKf5_KeY6!7fOYM#@7(&N zB=CKkTf#U6;X+63s#x%W#wA9dm%;q5dT2-DUA1I$1Pz2Cf2pOH#z{rR7cdzi#wIu`vFbcfi>8 zWmCiYtk!+s>{;m|x!__jG=Pl$MdFIKG+*WOxGSA*O*0RI((YJWThm3Z)VAHe*Sr|! zM0hK>Sb2ucQCR`Gg+a-5siGp<-)9^bMQGuS!fKm{tahZ-0erdQe&$5lya|P5cXTZIaE3)5ZkoBsnI7gD{*DZCS z?;W;7RXud38VJTa+V}e~$7>m8i_vF8Ep;J!`dN2vZZX>Qn&vtm8`cFc%~yOrRb?lX z2^nD2Tayy7o$jXIpV|(lYPK{aNs0jZpcP&}%hEa^0@QM8;wMwWRNJG!mG-OP#%(Hw z9~Cy)3^-j;PaB5YuTGQe?>3iXJK;HH*8n3<@X5;=a&v?*Y-N}6=*C>nlPc3cPoaOg z`!~`qlK!u3k^g%AczH?CQAazP$>ks)Ft0VkUHDUNXt`Ss@z%uLy`{%@`n|pSLO!QzT|_?~_sM+)tV87H z>Z?;>G3@A>u}LTgC%-Obgmd3!$ETdAD3ka%gRZ8XT9+D|54EgECiTT4A*Qma2UA@) zN_a@u85Y(}KvBGCr7$bs6M1a8_0_*@DlY4FeVhno}c> zGCWf3q_o;(=d>qSKib2rjL%bbyi57C^&dJ zF@u`o(m%uv66}mJZms9>OrhLI($HjV{WBWisa%#0qv?w{N1t$Msh$>$lB(NHlrH$- zfG}UMJt8sE7d<1LDPGM=EAAubR$NRO=lF_8hE6MNU=D3l3%s~LTGdt9t}yzWt1^8X9lNq zQn{J-6JEBcXbCgQD1mL+(yGx(JN$){X20wdN?a>!aQX6o7)0_NcJ}N2p9+96>KCQk zPfy9-Klpvb6WCGzW&8B43oll6`0VPlE+dJaSW|NF^d&x z(5wr6ICbns)Q6}T<9HmIZ60zYz!#IJ0&dNkiw)##I7U{BXM9<~Iag|pA2C4oyL$%V zdiGMJQWG z(sXsoU$q$;N7v;+ltW%S7@DU!XCSn`k*%|m@n|xOcMoY|otrm$t71}O);Zo+Os$hV zy#nzq<2)dHaY`USk*N(`1@$Nyv0;7=H7I}m<|_`UHXL3Wwx5?tsF=vjC|lGjBAu->8@&NoiK@KK?CLV%%;laz+Rd(>$AG=GThn(6~`U@T0iO5 zxRhYn5ja?<{#q5oJamae-@o2gqTFT_Yi}STFX=~KgqWRn@CPQ|+mMc%a?f7sMx7h< zjO3mDz{%0)WC8?OIyxqDm@vE6LTlF|mxdfHBY$wXZy3J{QH0M9qLGy2wihN)Q^l7S9edoA^WvI zfB9X7X|l7ZZCO$;%SAFP*O1FTPR@{7{{BxI_Ew-nu%5_lmp$7CKHjVi%rY z#qQRf%LrcA48*$>(}R#4nyCZ$a)y@~m7GD#)&fT5s>$u-8Xs}~%ASaa*$4suM+DyASXQsw`EtK_aS25sHM z(KHNAM|@74$P?Z#@k~lY4={&&>oeKnP6l2oK9|$U12^1FTU3q}>%Coh&d5G;%QokD z`9g<%=8fgzuL0`$Vew-24R!s_2AwAcj`CZzXk}vTx-^J#{^9hkV^KYNW7<%l-{A%CjENXiC_Gy1;u8Gp`2Ok{(r)Vt63Z4R(CIa_? zgtqn_fPakoj(eN_<%g%X0{^lB_TzvjF#opiFAHtsXqse@-19b7t{t;?)7V=+#d5|- zcdvC_CL?OrxX}Fl&Z~htyXUkG|Cc*t9CV&;POqMQ8&3HAY?pQJ`fQsmbw2XLr?A`O z*ExxGfA-?GSRQpUT^gO3v*GrdmmGEyZoF3an0_uS@y}j^FvgF&5|8|^`u_iQ7sHV< z4&NQwQL!xww6|6NeH3z*;+V0R)`A@oC?@3~8RDjOSG=NH!Cbu8CJov^CFon*lY>D; z#mfbm=beANZq=t0B)O^R@_quE5PT8T>FTaI-W}}Nj8hIy|M)Od`s9u1fy@>I$x|#( z=~$sh!6AfZdx+o6M44(Gc2_2qeyt7hvXTua<&KFf=p1TyC-C*p-{EoI2kr*L2Pyjf z3()*sxR};Oy&my*`82kQG=JUs?NH*cujkP;X1! zd___OU>u+B&|NorHtSpN^x@Gk*sF@6V25PL{Py#_QGISy9m6JY;L_(Z(y(Ru%MmB_ zwXxLkp!*zwKlO}%{UZKz77K4*VE~VXKarIdhi%Ub{3sKA^}y914p<0SoPYYGA%T0m z;S8ejzSu8wuMS)#!Ws|K9tjBjnso-Nv*`RnI1CehVw4T*To_o~EdH2Gg}OwE9Rpo! zS?~0L!vIiCTtw#2Rq+G)IhYI&2K-y?!we^FQy$0we6Voclfx@TSkU-DgfLxURx|zM>>kNs zd!28%^4O)5ni`TcsQ8|@;_ zo9}7&u#lRv(bhagy5)ZT6Oi0;hxzXf71Xd^BaK_!pc1B41({sLw0kG|?q%8=JKXe= z`TMtk-MgREmk_BiH*-iqA$IZS!TO^d$NJdvY0GxGF4<4XhS5HWaJt1}Q%nnSrF?gd zqHhH^IBSI@X46^`AfBNLi17K1XW}oNbUg@2&$F!SPQ7$y0~=;jM|FcwiPlCBOs&sw z{mI!st+!po<%tetvbroL252A?s|V2v)v`n4Ed|wtwp%L(_v=YF9tVwuHpGq$kT1Fw zj4h_5mN&9!IFQ-tc;UX-xY%J5%w6llgxudZ!}$i76fd1E;X68y;V449`LKjroJ;Y9 zLvK?z;SGr}nJn1p(-1-B_LiWwvn_OnglR$PLABKkFy74r$(%UUQuHZmc{?qRl9K2= z(vcg;(9YXHL*%+VRS?xc%I0T70}rv3211lu9;T0y#fm_;wmWtRMGpirz4gqn<{*ZO zct@B$PRc+0Tij4%)yqOn=9Ro;`~rDa)Wb7o#aV>nc87bZPT)7u?Gleg@q=^*=?R^Fwm zNI0E@3Id?D^`VRf)9|Fivj&3LppoC1u|+n7_$q53hi*Tne2ek1v`o=P#tE~m>>BER zP+1*Ad68mo*kWp_U`jy5h$&=M3hFg=Op?->1QwW?Ve3GXuvAf2n$%hB{2bTx*(Z~u zMrD~Svca0lAUHgaL%B0J#hogp)H%bDKWW=;sFj?~n%olS(QUXH3< zgjxPr`~d0U2diSL=ur5u?{9CzPq6Pk1+(#$6@kh;#5WGeb|ix*x>hl9@I`|vazO$O z1at zSBuv*I|Y<~za-g1#4G)5X|~sVWywyp7^l>C$qA5)j+N+S-F^A;s`|b{P6gu%z}-7Y zX0lt%vFkmJg9&Bsj;f%tV^eh=*#z3c7IxG(NcP22hxV9R@r6YM_LEh&ol2;YNd0CZ zHgJW9BOJ4d8JuhuITIBhe8u<2u+sQv)2(a1K_69^K&>M0J-Y()u;i>U3&q5RT*{L2 z1N0Ol;xWE1XM{3PeH=cZ5e4gqyij_BsE*QYmK7Si07$C3tAPA$vsMv|B1))C5Ew}<3VhL-Fnn&;ZV+533FhEN63$h8JHD$*!@-h>Z(l6I6lz_hVDod*NW%%K@(pkZh9|IdG zyq0<}8n)Y2)a-FLAXT-DsF@tr>GD;oGgghvT3Sq5i^)7xJ5mVgj1k(H8W~2M@SJ$J zeNmRj87Wk`%wb7z!6{xMu4S_doySV7LHReYTa`w4>DuJy@x+cNy`d^pil%L8c4a)w zJ=6K9Ldd`E;P^@5d9RapRq-sNwD&}Ck)i6h+3vrMYX@_tHdK_iKW$e}|2FcrM@9Ng z)#M$k{+xpP0w)xQ1`TqT?4`GsFX|b(@?}eRc8Q-;D#b#EtZjIf$PYFcEV##=uNOjN zKg#yZ0`7G?7WY-oj%|LWE>uY3`8b-#Z}o?NBfh z+ftODefS}uRTYz^sX!W3KOFk)MBX4~`gM4_fLY}1b2<0Yl>RiRp`-6pu|sZh3Jg=a zXlYuQKO#7BKPDJa70-sHhTEpI3d6JBbBd0+K_=c+%x6PnPR2&?j zE`CujV;uG71G?D=Mc{(@R`7sqpJl_b;3Nq%Khz^KRgTQ*xbwi_ry{zD?(23?yEZjT zS>@jBljAYAq<1LBiP=>z13doEcO#-iz2uLK^T*1yRCM4$rchP68C-C(2_5(j*yUI^SELc-C$Tcb^S=8kuv93}b0uj)ndc{5XKTqjJA z@KNe{b#a>{(piYkC6bflEfsY@w?zP&zB_i%uhU_w_9&T5DDUfR>O9apJ2DHgl~bC` z=QM8}QD7)kRAdX6wfq(cb%z{%8+TDCBY4}t;#G!cf?zK7g39v;nHB)+0GZM`92(ZV zqOPLh@}g5+g?OjN-J|pZGC@5qIhN!P(JpHd^G8l!B6aJQmcD&rrf>TTQU{JCS>|)P zC70FDcf77_22w@$cLbhXeQ;IaDiClJ5b#ERCro|Mro8zdfR^t&{@G?DAn<=DRGfMN zWM}^Q_PvA)!^H#jtKKwe!-60~9aKJRaOYL{1)5tz48pBwJPD zc<*A-uNQJe#EaxU968Qv2^;B;i*Ma^~if&>Rn_Q4f9zPR0)%SNOO$mPVJv1>i|enjs$gH!Fwy>yQIrP1{XH?eJ5vg3E(xly_*|GsHObUoU1 z%uLN5;&0J{8IQK-*fOli*mme~B*MMeGUSKO!9|5yU379feLu+bB>Qy$gy0krp_{g= zqyn0FzogvemH1ptwftpO6|atGY~1aHocEuQYaWz3KPOSu(hZ_15gg{eSsVgCWm&=j zdoyEHT*tlVh0K~HfF4=LB__X7-x!V|;fsyN%Z%7Sq1{C&*~V1{uu$Ef8KlC?wY^@$ zje3%hZS&KtGJx(NB_bKPz-xDu`3 zzq8y8qRL6y%yWRhczps7I5l>DpypiTyz9bn^`$=UU zCJ)#DAs+K|IH4m_b{s9{8`4gm9~dj2@25fo`^hsoh$3IPGSR-9*loE*0}-q>GndIB z_G3sWhi0eeSW~EqI;5pYbMNZfmNYc2yx0p$Q#7hVN6ch(pm4<8k>Pia&RH$Q&uno{ z|3#dnO1xJ<){umUvS~h0s~Eo+yonvm!~{-DCdU%U`;Js-*`|&idc{iq9Qd^k=|4kBtcq$&;o*h5JC&RsfZMX z0162x1du?0P^E;91%%L%s)V9+K{^T|ivNwCbFZFz-h03Myzlpa?)yDwo+mrAXRkeb z_Utul*37I~zj(-aR#`0XnZ;}QrMa^j96j0C({Mtep<-@UpF0?WPRdsd_U9{To-+#S zXpr(RQ7ta7eeirX51Qp&&uz?O7|z+>BzG)#B2B(bC{cAf9T`oqG$`~Dcbhe=R%X_c zD5p}FQR@v8f!4*EmmGbVv4oP?mR0KsJ1soAOizr(3!$Wdf9lS$%!%sO^MeiMa49er ziCrr|R+h9MK?J`;Ph!jF$74q?c`@mU1z4Tk>40??v-n%DmG+4X4C8R+S)VGwhORsQ zQr6AAwYQ5=8kwO(v7@ppwTb6?-hF)mPt{^WT?n27rxZL_Y|8qiC2EUS;treBv4D9M zTc@qziL6=it`JQRsH!!Kdt7mCe{W@`1|zFeUk>dWmOmb_KfHuG-$&9j&J-~YNKQJI z^S33I~n~a`ucG%2Ak=?YHJg2}{wR33OEUz=~Ek%ftsA zagU~`o`l9I1BUOczG>DfR|*QDhf@Ph99U-|YH@IXc})wT@5Ck>>PS>RKh-)wf;f9& z^Nfp;xI^;5jBNUGg-Y^SxlMuUw35}<)9jG zWOMp)`O^^e>@)Fz_n%px_R@D{oz%nI=XYgg9!uj9!^cz9DUxatGqrGh!8cHT)llvr zGS?W{u6lI5Gsqu3;oetTPLxxIm!A}DZBEu@CqY@V$3-+7Yah28w)M=zAdT0uzXrsk zbpgPySNpccv32<{Wun9+4lIqCu1jn%>o8SFid79brrndHmlAf8ZGYk`yY4gAsWC)R zE#pEb4a2EPU7_2$YSwNh{C@%pM$1b6#(_a_J*H_G)Ijx|yp$ zqDK$aBMP}tP%ybZbJbW>Yr7UDYu7mx zxdW^PWwB;*D3Wwk!~n*vYjJ$9ZV<$f`^0<~~af7=?0vZoMK5YTp(++o7 zcc%!a^(S3be&Irq0kp2$*WXekv$DyIWjLn>PUFgwD~=L%=ldnWl@mU(Du zEFvrY+UXbX-AH+QX)pZTZ^tUiuyI4vnwNNZ*}D||9@(X2o0257Ch)WS6F1^1>{!zS zHqku@#!%2bW{AiV^ z*bP`TMyz@%Lzt^PP3F;;5jpDE_3IIXWLQmKcEwyDmax8$d2+lnn`%Z0RKPJ>jxN3M zd)W1=n6ta~Ry^R5Ovmj=V(;$K)d&~mY-XDwd8plZBC#!CqU8CiJ6}WXXR^e+Dtrvm zpQ9h$Q8!ao)_%mQIPPg2G`t>s1nXoJE+;8*-j*wao}?r~6pDA}wN|>B0=CtIj_OfIn&|0T1Jjl zTx!L!C4q@#Gv~yQ&P$nkJ_uijuh;q-k<(cdp9HF&7Bv@}`iTXY4Egq?U^6>AbK4*{ zbcGk6*TeAOK977h5p`q&w`~6@<`G}J4I}es*Q%~_*Wlkn?@+$K5GSTbth|G3A z&xv&O+>uaOq*hrT>A4AdXjms!rPNXLPW;v3E<@T!(R)CeB0V{p5Lj#*AOv_2 zKy%xjV*R_p&fiqbbAPJT{hau}UBx^HU~%pR{9)V@*vohi#6k}eD1EFAqDOa^#~){1 zq4hv)#i#R`wVKQ$dPM7p*nQ9T?K#<+^ICh4_U_yu%VEHEUUJ88*JjdH*u74CMQvC_tZp5#I(5wXC4n$6kIi~irO;Hzk2H?4Fd*s99EBPNmp*J9 zeAia^LXaCbr)7fdGsBmNx?YNk^@xY8E^gtDy=yxYYtx?;7$9viHawcWnAeU3LY zx~$2s$7C0y;Dx#!&H-cx`FEl&&Hf#HXS!6c1geQkRxAsps^eeMtJZ5|Z5@3S=kusB9ka<$%hRrt zc#rs-s5HxE8E5(4)TX7idfoavP#z|(_3TML{X`DCt+!6geSl}GNf-+(EIvLyn0r~& z9Sxm1=esAxCpAXJtA4adSakPIbtjv4$Bd@WTBIp7AC z9kDWpidLjVBL&kA-QHN!TEv(z%hd)B_P?uaFn(9#%z^rOQ(ktVFcgh1}owB{IP< z)%Sx-g`bP%7y)0Ab)+yX004tZI+k5O;`J<9ZJ$__iR*yB&gbk3Y%(hHCQIH7Ca*7t zD@XaB4}X#iT=7d!^X=k*3^-9&uSh79u_UF_e_BBjmFy~)_VHOGk27}KIqzd^iG{~d zNA@&*b9O&A&7!$GsGFlhtk%m5N);VUu+(P|7Fw8c zaxa!Y>0YnTLV^*DVpLaR`KeavGv2N_49K8%D6?{!`^O+9cNGU(a^YQcRc$|p z-}dJTY;x*<^sez{-I$Rp03_!!fqbHfisx_Mmb3HGAOhR$HNkh4Y|#k5<9z1bw%U65 zLPu_yV*19Ee1_>F^(1yL7Z)N^zSAJdQo6FMYq0G$6`?xf2$)Cu3K(MjWGmjEZ+GZ{ zbhgUIU#|{UIbfPc)G==!c4$K*A?=)PGbP_Z=lU&D%}k8E$9(PIev)hQk{-3{selZU zIEDH>-w18-rf}v5e9SAw&&vsx)g+|Z4|*+GrB0g06aBbfhGDS?-%px4UzA)Gwr(H- zE?7m$AqPTn07fvMr6DqtO)Ob156U`>C1BH&dmG!j0@N=Ll1YkYPy@2JeP;Q_G)MXN zS~|z#^PC(FB2%5wXtNKI3_GMW1gS4@jASoaWGbqMejqKn_J{d;q}eB)X#w|-9-EIJ zom4R&zn$v!)#t_B0M0?*6{6!KLJV(5O74tAk?|iMY9!9X8guSkPwKRl+>EtKzh~vH zlJ5hP9SyYf^vC!Pnm<_oP%&=NOKeQ7XG9j}73 zg`0A!YUuO4Ab!O)IjA3d@YeOU7Lgb+-~fZQS#s()I5IJKnl;jGdEXhjTqwFM+8iXQ z0#Q|WY6*Ezz~7Q5Sa%}2X}a_sWnY-RCbT7*|4xmV+1K>9C82@e44Ci|jp>FHAq>E58fWX47Yg_OrUWX|Z44@SS-#;8= zpwHPh#ocwLC7c&hK6c#Eh8=K*_Rj-=`2+&d;ng>uPVQ(|YyZGmMKk{2@Dm0)ko%`) z0o-VP-@{({V@o?5_}_BOnY9l90H*^$6InpgkG`9J1MdC>XikLev#)x>b)kO@{rYY? zzf9Q!0+Z(K3zww+Kyw4VKnxZvo%J^vqdRw@wfe65dv^(+J0Q z(cWWec*X*v2Mp5B(?V8I&gc)Y4B$Uk?_}lN>n{a44c$>3n_L%1rTJpqi z%Q+>yUeORYX7?!TD4~6H*GBrVKp3E!0ju>i%)*$0$-5_*^UnIP0MOz6Iw^M)!joEF zl~tQEnp;Y!Gd)qmq(pfY45%*j?DXkl>a_~F50*Q-^kapg1z3Tqalar&Wg)Q7B&^;7 zqT1Jd#gV0q1ZIV=L5ZdfU@;#3*QiTwP43|OT;qV;-ffxdPoBlzDk>r@O<&+_*tUw< zWKX>WiybJ>6bHJdw1bu&##aGl95dYsYxKNcJ)3TGEE7upV(T&2AnD9>ronYb%fc`p ziorRjOk*S-Oz6*eiuDZ@N9A(`dv4%^o_?h64`eY4#RkY>A%)lGwNz>n=ab`HEQYSN z{3#3mNZf^s1Om-ZCdk)+Kv)6DNc>tpbGyA)vlgnN3PI2E)py}a@!PiQ&uN?B%* z*p1sdEt`w&Z^oY*YZqr<0Hy}*ow%#RM7tmFvFH4e0CNF)Z2ZSkRz#Y^lAu6} z|AaQ6yK938r1Dj%)J7cJQM+!`nRhRQu1%Xzd*rWO?0H0?og zGMX+oSp~fAmzT~q(Rf^vd}a*r)`56VgAf(%llR(X3cy@&bDWJK&fy`P8>Y#1A8YS? zx`iT`Zi^#eVzh)xKdmjDe8?@*kk?kakpH&ozKK(&d2j#+!t`WF-p++viky3B6ge65 zf<3m9v~7LE9v`v5PQni!HIJStwZCYiK6T{u#QJOdi<-9V=UJi&Bo0kzsbmzPrC{Lx z)gv~YP$8wolk8yn(vvKJ>Fp7b@4|6+Il%Shc5agBg(U)F#Qt;-k=qj3vzj%vKGqRJ zkcSTrvJak)w}9!&CI|O{82fSD6M=aTNig@ zq<)9zIa`_#S_E&9B-p|3gV z@^1mhJ<@s%&lYGxjr}Vw%6xia6~1y^C)o9fkbR2-l!A2cA)T~%Ke zkZ{^X97IxEA@-R#V|F_Kxm{-3?copX0r^IN*zDOI%#39UImGa5doU5^gi`;DNI1sx zEe3x@F6_cZIIsMAO9Uq7@Jr-fg0#I;{&^p*JI{lUgq&XUw|`q^j?ji|+&2VRVc(I^ zD(X$ZCy30VgAKO!4yPbL55@w9bQpJ7m%MMFUCMb%i2}Ndijs(>ET6PX*nG(U_=qSw zJr?eCSLgVH=x%=KUBSb5>Ff*#8YFbHxTn@g4@{ya-q(~WocffZFAK^ncJ^*P1d-Q4E0cnetjZnpDLyJ+WEYHj-tox!O zs8gj!-IJfOoO1|XHek1xfmR8v(Xu559SOF(Ph$+(2)%xH$hk^vBmJP&^eTB?Gya(z;%Mk= zVbGvbZ`cT8B5PuucSGir#I5JPVFT#$Dwf1Pia1LxOgyo7$@Xxf<<{qpyR?t1Sj-Z` z?*v!zn@S2^EWSs3p9KOsK_f`J%YHx*0D;(eynh!^asV3rUUM@W8pb2~U{M+QQzK>o z&7tItkgZ~;y~m(0b0i)*)HyQPw;)F?yNK|KL~e8Ur+2uBUJ!w`Pv1b{4@LW9E{^cQ z#@p!#8Ae|8vZX1mQ?Dz+G9X$y%nDRG0}xvR;G#rutyR1Kc5-Yx>?2`-fA*4tofK~e znkXkeBX&rYBOi3q8b1Ql@0xzriBYFZ00=hDxNK^Get>I5m#A2|?1 zdAU{fL}*HYyV`QeW0@|p2o$O-%A424CsX(0q^#6*sJ#&*LQeqzmEgtD;MqmD)vtR`q}fbIv^Sx!0MoTn&*I*+wCDE zdS|J7Cul=}(;v;^WI@ph8iuMmb+Nh<5W_y>gekMV{^tB*OmXr6(*uFNo0nx*C*#s7rg!fwN6 z3#VqCk|F^u)4rWf#UMzbZ{_*UYE$f-Qd=p~%TQzNc6C+rUx z;YR66i_}YZ^klBLCa3pc%bLAzK6IMvw-e|~Mh&Vyq|A)`V0xq(NUliI&kGIl(2>}D zEPp;nteKD;Y3CldSFX^}A_W_-tLm{=8brS#e^y~hOi2;usiSD#>|vYfIV(iu%t~-2 zInp!7b#8}lC4X4L=4nZ23O9nyyZsI}I+AG)t$&G}`TC;BW#GMx9s%9e4zU}g>z?`A zxPJ3tvBiY(ydrVo?bzj2H{%IvBU1GMJJ-hc?U|UM{Frtf-YcjnV;9HaB_J)v&vS%- zoa3R;m!(NT#@g4jkyC4Q=QvIPRrFJ!!>WIt1cbWQ1>WBx8qa>Z{O3`c^=|Q}j#?Y= zuXIWGmxq&{Hr~ihd18K}D`uhaGqcpGHKZY>^$ZF^LDtOGyU(F zf_($|@Q1$#L_FuzV}TG&?GuN;8>RqiK!`T~BbIafTfXDt(%|sEA-fvk59v?C5_KbI zOsg-BdgY(w2=f(HR(lkZYf0Fa;*-gx?80}!CG z-aElUpGzBZVwXl5RMe&3{#^8lE(;xvfE?D81(A0B5rUP9!s`g*p6yEOyW)?2<6m&! z@a43ZwD$nS!vplR4hmuVHhYR7L0Vlm`dUTp;u*u6&}Pi+ob;r9D_1k&sXoF`bTS5S z8QsM_69ImPKR~mW_N@*5j~|`}=ApNz%Q}GeLad=E3nMZF=o|JhJfr!&hdaDmyq^`) zbHHhQ8&baB>42ZA#QYAs^W5=G$4?JKcM6+CYK+hxNuq)s)ZVw_PANNmt?H81cpjTQ z)w^mcpsj*vqVhU2V}N&app#m-#Nag3;?i|Xx+^MQ8}q253inM^VCVx z9=_|bPkzG8<{o$|;W>|WHi8CGvC}FLB33#)(Ga?kxR=)Uuo)X0Ee4pl-4BSckUhYN zQ}h<_ce1=Xq2qfY_R?at7=YM`?`J;_A|TL6#-^bpfMt8J`W%q9PYggwS?D)6Z}pCc zNHQD|6=|w$J&N7(1+M+374G4^`i3=q3IZ7j;}aBDwPz9`w(@&at;}{bsYDq-staU3 z%xe)k_zVpUq5=$~ZZsgSj#-!sfM~_-#P77RbhYar0-5dWByjNAXp23VE+`-bNCWNX zm+*r#Xo!cNRDA;le7S#*^0(NzUkLx~;&Yl2C z(*pz9sC$1OamAnI=Pl_H4}DhDD=enCxXT}afcU+81ERqFjC*Mna|DH|C`l~mY(fES z_%D%Dw7}E?&FV!Fz(=?qJ%g<+K(x=X^1*@#IbB7ntRKNIt^M~0@B1xE4`iR|`DTe= ze|q?9$7LXE5D1p%`2z0Mt=5o!Acr~W&Fl6MClL7eCXO71k-(jO`ca7MGjI2%gXM@? z$>@%RfGL-u27}BpxyYnvT|gcM3EnFuiM0WouJ7EkslY5_@Yn1ch?LC(pWjq5?DTCM zu2vtjCmg4vqwmGqXHDW7JG&)kT-2Q~z;#I*ZRWRtjsv1Qw_6+_{JnBO|ESNL|3UN5 zj{g~>RXXMG3eA%GjC-|x1~_C7jllQsdj4n5rvcf3#MH=TC2ZnPl>8f(#X*M$0|*|V z=gb9f@AX~}0i7&Q16uGiU?fu-Tm?*>p`uO*rSp@@Q=WT1c$>&+6npypbI0eikMkzJ z1_;g`itM1XwxF=IC$Zf3M;J{YK%m^e*Axwa&_qSF0yY@Bs{%mhl@LM)EctxD{yT#J zof^O*gzv0Fs{@vDaM(B@KtJo?Dz4tI%>!V2dmTLqJq|1l0C#PvdVx+^umr^I??kr* zOj0VVhJe)HRg}T1>e0?7!RO+YW1R{6P!90yz68YSuziAF5+j0~lrHy_rA@BFd1dU{ zYIzzT-(~24hzO}Y@{}AnsC>}Ub$W^^1caI3Y6KQfjm7dx;~^`-tFP_RMiK4PR5&Zv zft;q~9=S!6uzeXbA+ZfX3^65~Lp8j2F6!z&lq?@)7|Pyu21cDo_x$+v^4CWy=CLNm z&LZQh`rG2I)DAa1zQ1D2kr&jmb;BmIRkHUSP;x+6{~Z3Nwy@@G;)t(jR<~?#?oPt} ztMDH&CreY%m-)Q-Ovz^8!_s}X_c-gEMiv{$Kx33t+weTg=!WMGZif6)DSmb9T`dHnGA=P>`slri*|Q$qvGA2ohzQAvm=`k2VT-s65!CsBLDr(d1Ki5C! zub<-&r~fXeggp6$Qw%tM=9E9YNp$G1m2>CUs6$0%bz$a@_r4o#LvvqGD?^D z^8=^cZtMKaYikPUi9d5w08hroFFA(%n!%$#&@;b8{#;jk{TMb*hL6PjT!wRQ5eYMY zNE!D#k*M^C=b%)ZIXq>5W?Y(@c*MOwr2O)F=YD+~L#=oJ2DJgtqu!q@pYC7W{J?q8 z&@8$G!x%2`2^QIa3AuQq?dJ~dzmkss5#u>p@z#kWo)q;d;nbwqYyG?1RMswXZ`Y(n zZN`l1YX)^bV#}{3y({(~?f+m}M+G@A%?FB&DfpakvT zqWSBlzbfJ{j`*z!{d*O0Un2K!p(WGDIM)S~6WQYcHgfJKaeViE3OGUT?0!G881K3P0NB zn)Qm8<|Q50eXO&Qno-l~#D(otA$A%~;Nwzo_GQ zO+uIhGd^A5(Jp$ylnD2<%)5`VnN2%XsunG^4Xi33lXf!dw^M3RAxRXV$Bf3)zk$S8 zHW-s}oMRfJqL6k+7DQFG)XQgY_946Ekj+FTQ4PSeIyD*?M(6H)uAI2CWpHRY|Ayc< z5N^+lNB^>x|KnOzWYk)8Z@nquy?)>g9MTWEF~MF^XuaBNK$2g5u%Jp|l9<|vOK50c zQrGXjz8^lPpuHdmO=TiSk#pdZ$}ywD^(nEP^8NCC7%$=2!B^<3rY~zGd~(N-tV?o8 zWLdHNh+~d14hoCB#xt{(Ci$jKCY+)@`VqkHRe|=8BOQZ03X`MbIF#d*5@secA505V z65WLZ6|_I7(Y?y_t8tBqNY$bm4}8SECz%)rxCO~%CtA9Gu6I;Vyk(^Q?)c@oZ=ee! z2xFh+Qx3XBcsZ$!Q3dT85Tq{??D=WkVMR?nyiZ4GDbDJOo_CR(%e$IarvY53lBU8a zobf41rZkU$RQ)zrl_wbQL}TO#GB5@YAhCHs-@Bnh69;X%&I?fWC5p`#WZSR9-#iL* zC?tycJKrnK)NG!skMevSl@PBJtGF_bw-b9fE*B>ZG-dh$+pM0NK}i$kHY!flC{@8C zu?ZpAVCeZ`<8&jh(n;yH&99uVCi6bHDTlqY)-Was8x>f#-OlYl>KT=&s7`5FU7H&$ z6s1^a*nzG1Qd5=7h`A#M1d?d0%OLf3>SbB#i%iT$k#NSGxR0{co`{qjs!3tKl|^$W z*uP0={B9S_Re%8a3HP_k>2&h8m{+hsmA_cj&7tc86L%aDlS#_*hGiQQYGs zbunl5Ce~NQ$j`M-UQKBX@^s%8t4;COiB_GyA~M+TNHmJgB$&iN zjc0untb@Kxc41t{xga|IZw_7_o7=eW)2n``A)j2Id7Zx5dx6bti;O2=v)@t^BH15P z7iSWs@~B;WhMyIfB*5N_b4E4A)=R7e(pHaQBPw=qP-(r}jqfPi@PN;Dkae7K{~|(6 z4?ZC2nro6k1aC`w4MBB8$Ne1q_)vsnsz-AX+Sb3XBOydq1F+!@ayP5JkOCQviV*RNB=>+fAg?*I2F%i|9_EbU z7Rk?rxZ^a9OqLrc94Md9V+ofGlEotG2CM3G-X!#fsHSB;dZRbLL?k*9jiS85EZvW7 znN7|sQ&VxMDA~E*SXS6{31-?aXT&FjS7%YVaDYq}?Zxy9jZ|!$!JJ*0OjBW;qnZSI z&*U%kQF9&-C`3xhtL2B9>yP=Jrin(9!TA$ zad;!*+L)s6;_O(U0i80_HO#5UqzO@%9Nclk(D|L1f?394WOLd_+v{Y!Z0#7jaWJNA zUsEB^Lm19UR2eoL$?^OfNcxO0HjVqE%(=aWUq8CPc)IrJ_#5~az&ruG@9w#O`5kzz zAAWFFJ5`cFKVa-80WA_<29tU&$sZL%9N$N;3t^{H|BHN=jl9beq4zCLB;j__Kyoc zs2(}~b^Bjc_ZQpzzu#mo=0kN3M@KIwf|@@KG>nz}EbX=}@37V>9e>X$U;2VZdu zd(Jup(XbJBjZfAzd;aB0f97wdg<8gN#6$13QWM-HpY>ary?m>m&z`Qk5!Z1bgtGhR zemrx1?}^jPz#k9g-Ir%A2ZDgVW`IiiFXF#y<3FA^4or(`7&gYjWzt!Zu(Eu{B3NAw z-ZMEmnNqScvHvnR3(?xm&5!NWLkG8&$F)^c!~v$7TB61pao@g(emh~|v9*%5y;%pn zMMlM3M|GWAqBwQk!p2<61bt~!O!Myr)!O6$#1+LO!G{1#0Y=+YQMCEbM`dl3ge%c znB1sF-*|GUteklT31u5~PKXK6l4(8_w%RzT*{Kp$K4R+yOBiatn%VvI9?!ELobpm) z*G`b7M`E8&e7viNPO{mTmT>NsVhchQ9-DZQVHI=bX7Lo=C)tx)d9OXIi$(&*3v`B` zDO!m|!sId^4+pVC`@gNfQT%}CZBH=|sUI`+u5_tvSI^%I*vTwT}N)>Y3qrV5`>JCM9vFJ9*PT`sSQ$dICjEw7Ufwutrs&2 z_4J||-3Zd*r0{jDvdeEKegqs=L+e$~o~G~ytuLRL|1Q_gK*?k%&Q4@xL_@_KYrIw9 zY4yzee1=5~vd?(j!UKxW#Lt+c7|lPTPxe;NujMe28Z0dhlOg4`RXN!G=Xl#yf@;9f z`i~ZK*-0t%lTv9OmlyNvQ={7-l=lUo1FZ5FZuRb$fp1C-SUD47w9*fHn7emg$4@+! zx^iGG9C|-?6habNXzdFU{k%#6x$R9ESUPpSfx|?8q;&SIN`z+ol2BL z-c4I_c&yrkmSfUhfrTbQlU`TK7`oL*HXpbZ6ur0VDv)x}!)GODS3FK^GaDBirmTxB z?0pEwtrJn)3I-UGV5MlE=a{Np9KN1Ng4M!3iSSvuQffZE%jBBtJ>a#GT119w<3f0C zgN~c^4pU^y@YvZ)Gj!+dcK;OOdbV!euV$}~0XFO~!w@h9^SQe|+1hy#E`}P`wY&^A0Pp%y0**ypxF??J*y?T20aOQTNcbR@) z{vc7=4_A36MmZtFU9{n-{|iL5V;4frLAZBV*~6>YA+LwX_Ru&L+kdsz(tiq(`Eo&W zEBLa@?m@#4e@anKq}4&LHA7Tn5=l%7PokcCZMF94!S@3uQ}99gtH7%)m_b`X!Nk(E z056)qJzvHWl0|Kws%`O%N{)_)AD(% z#Du?*y8HbQ5Bj&`xc8f-=YHFeN+N&XkZP1)tano?L#vvZN6lItzjNjMz~o%_^auKZ z=bZAN%dd-mc>)+y_9nHzqsyjaeo}ZGdPVBde9s5s+Gl3&2R}%Hei*NpF41WoVzl7-jb3H?TC`>-^w_cOdmk#ur)j~Il zj{{xoqxtvW&uwVf-WEM|@J{#!+Lpb!GrbpO)-NUL^dXPB>J#X@;bko1G8?d;Okp)T-!4FP_ax+AvvIa+l3D zDBiE<8P1pjm9U+ZnQ=WfdTPTYY5UI2=}XwTW1ZR`qKNg}_uk9+!ZP%-(z*smUF!U< z<99BVR1kTB0*!5kV-!V%w#LOd`Ucfn{mB}C6??tJ?R8!mSuP9oa$`!WYcDug%xMtrW=mKOCvfVZ9X+XMCelmVJ&IO zDniu}vN<5`V#gRYF&3N3V2Hgs*4JT_qW|;=<*Q!m?NnwMS#f!SWKYKYeOe6;~3SPp~!=`i~~|10s< zFCreSR2L6gU^vIAUhuq1=Aua*;mqcz>TWH$g3pjf}KD~a`zEZmi6!rJXpC9|tJ-@pI zad^g!elm>HZDJ&2t>rVyBAap|s0eOkN+d2V&U$I6QzLZy)75foyW~=5!-m<=7k;Ai z2gzJr;l#lB@Jmqdb=rwn>YkM9XtB>pZW89EIl2{<30Uc5S5KIG@{*D_|ExQ@%-w=$ zv1uZxsg^6Q8qgaoU0)Z3p;|?La0v7U=M50Xkguo-5ONd5F_O1@3oUtYye09eOFjZ- zm_jwzNnlhW8xqzKhX>2G(&vaT-~{JpM(VCmNpjND;v3L6o`^VW&5I* zx6NIj@Ty(BSM<@X+s&+7?*%?*{SiX`m;DPZ4u}p~SKQ+Adpq$6zgPbzBPAa&u`5156>z2B~#X?pqGkB1(U;DL`0ED8) z;)JKzO8^^wvj>+*1efB1p=<(=);|Svs2cfEkR?U?zQx59=@@0|cX#*^gJ7)YEi=jJLL!$JUiVRxT z5^2;gVuF)MP9R$N@Xb*UdSM7D6b{VF!t-itT+`@6CfXe?D_W7;Cds3OZXRAQqpkps zlOVU<5{W2NcRwWnE85?9`r#$T4*!7mp?hQ=M@1U)@QFpDP@G1zq`y=A&LH=*bjF`mmbTke4@aHwK35$*|I_PkYx2rXtSW>Gzp8sqOQzkVC5(Ax-UGED1jYx8eLzn?-4me&?%c8!sp+Unl9=tS-p z_v$XsB3TWX4$SqWG7gY5u%|>XokpQ#+FU)TTL+HuSVs97pR%~^hA)elm~5R)n6Qn_ zblI%N6Xqz+Q15AuSV-2Z<1Ovbh#6K=Pht}{+R&icU&@?P=;&ol41Amc!`qYEua-}W zLJf0s!q!$waF|K8I|n<-onjB5#`a?!74}394vvw&2~2icI+T#_XI-cOd6k>>i0TSh zUB}AQGB=3)y^;M7#P(Xk>SAK>MS^-Jr$w4HB!ot?2!P|xC+kW2Sy)F{SYTm8I7EXb zcSIi9rkj4D^RA=S zP3#%W4^?lP#+`KrGlj0-Y=@mey?XP0W6%VtLF5^79Wb_xAtHp}*N}uNCIL#M+OSZ$b}8>sMcs5xtqw zfBn!CGFDh8Ch#RWQ}Ph9wLyw0R;EglYnh9=s57D(x@cgfZ%71Jjl+5ghTXv>aUIW1 zv!Jr?2g1VxUS`6KrwvWAsz_CyUi#6xlDv91?h*$c&oN8Xu-Zl)?I3A!PE2B|dU8hF zrCy`@UM{;IBll)N@wUo11s_XTL0&(;L~!VF4i3LHG$q4h)mDG9GKYu34Fy%eW?D$N z6y9llEDi4e%W>|Pdasu%C!*@w=SBJWvP*vQ4evLQFg5N}|B{qzx$7d%0y@~* zN2<>rj(suLZ0)R%I&B28iwZdN;VQ=IJ&%b*g`YQ3&NR0xc4R7X&_P6?!4$ zdSu$!Vlg}2PsO=QFUvI#QC^#YDMod-jFnXR!M#y6Mp=Mc2S3$oN(=tuORBH53vgqV zqNXJOT%*!ty>L;ryVZ@3oYnx`vEn4d%8WLdS}|}86;$2URS&M{K1x)&fZWPM@B!vC zgHDn-%eD>qm!_e3M>N^YbcJP8a6D^RW2^}|BlqE{ERXCQfAc^1Ak8F*zK)y0@ z(hCnPC5klbCF?p&zS;xUinJt1soXX{oXy<}x7&N=Z+ zP^D`5J0thb*mZ`b;aN65iPh(c&CPQk0_&U&QahWNl3|(5{U;;v0vo}vKf`pN%mANE z|Fpr{d;q$@mn5izw?Mr{6Z}M=LqL)-qZ>^Y#*H+xj8kXbA)=S$k{{3Vv4TyG`zFo-k=_kSjt^;?#(w;oPOfv zxv2BBOl;8aGW_lTKy&|F7Bt1V*$a}atRoeCZ1VkOv7FC%1CNQ43+6<6iYjA89gh_c zzX#yrSIJ}UNRt-; z9B|B8cn)`C0o)1-RQOl63a!4OI=3Xh?|T}Zm1BV?UCTn|R%_|Y_+N1-vrel-iJsRF z*r%ugSx^#hSByKbI=!qFo?75+rVM8#^;X4nZB_T+WGC{fH60xsBOPt?bA|`97QxM9 zllexkaX^pj!_t7g`l-B(a;%;AK?|xjh?I}QX|WIF>zt;d(NGn0ihS+EfO+qeu6pHI z!aSr|c1*rB?YNtCRmBz`3Qm~L9Wy36a;eql>cLABTs1wWBT_tP)7Rt|7kNK`4Z@X- zu#znK^gSM9IfmlpuY~!|ZUcQKc3Ds*=9N)(RJ&!X$ijBO>=e@E)ndl^fpBGDttUYVHxN+eIdO{K<%cZyVwO^N8{)BRcm_@eY8ENANBz&uC7Eq1(e$TK7f z+?zMI1o%n^ORF*%OE3iDkWk8&JVrTYzLdz-hR-HSq_JQ;zJb0Z%Y9G@fc1#NVx9Vt zTWt)oYoB(#p49V4r4nT`;XZbTdWUnk)Us=35-9uUgMfmzA2d`u7 z(!3h?tNT`}u=_Y(2=F=ImufD|JJ1l1^qi{oo_uJCKEy1>o2*0N~i+4{$IHFavz^^@(pzeErQgC%zF7_~xYGcY=baP6-O1 zIs5H*V#4C$V#1=Lk}?W%l2Y>0qN3kl{a*fxB2XD9A*XsxRq2|75>V-nNsb8!2ne1O zydWreK}k|nQt5yBI`{=}?&Q~c0zV!fG^j029DI6#x*3r)(kK)S5uF)|yhu0S?85kFYbz#Jl;ua(h6u z;a=JPJYwIB_3X*An9cmy6p9h!7^WRnXduxD3yI#Dx3EG|5rDz-Y37yhYDsA?$_|t zd#-7IquKQGtP?wbc>sXkfp1Wv|nPvyKczW1OBs> zA$v&3XyK7$iC~YQ&{bQf;NmwL-w0xZRuvSP9E;9u@3R2SZ={r?2{*pcR+J9Je>(Q+ zTGp0@zMp=;aZg*S+<$NFlon_dAS>Cs+OX?V?fR+eG#Lq?Hy$ zBT%+-^Xl2O?9Q?acPE49H%;irc423-4+kdhnTW>V_j=nu?hgno-|6|G_e z1Wop^_ILbbG0`>p3y$T}x!Jw^{2_d^1uJ$dlh~+Mw5pjtZxZaLwf;wQ(gHu!?e(iV z;cdCsY3rr6F@8&t5x-HhPLphNwq66-IC3knB{+nl$0A5)BDfcvKCbkoh>1bJ=7(F) z9-}pSi}Q+?9;tO^LyQH=TL0$}_kRJVRjaAm9e7>+M(|H>4|9dUauc?(hB*Y8SQ+mm zxAs`-GFHY;>|3%%V{K~9EOZu$Qobc*r2%Zr6{0>AG)3)}# z*+ttK#zJq{h3!mB7-8*UvSa$$NpG;$oKjEM&hN!Gx?)MZ8`(`;(01QPGB3&JT-~zG zR+}!opPbMIKio&K46dx2x$Nq^h}UyuL)h^?_ANU#I_XofHU|LffO)>!KV}m%srsA{ zo=wM600jLwpiXJ`_%_v**sH$Q3ev>fM#;_d$5TPj1mo{&|x*<{fiSmUj6FmQE_7Vd9+DL%f{-va%_ z+UIvrgtaL;YyS3d%MD*88^8A(H#;85z5F>kGbW|W-_=L$_V7q7a_kOfSC!|ABT$MA zerKE?*`z;lR4^$ZWb)+SR#!0bDORIQ=%x~Tkl;zBDShTLZGYKZFmb!>xL<18^t3d0 zLD`{Cc=`Z9r*=t}R6J@yQUfP9F7xu`)^%Tu4Q>oODlVl=pW!_~6SbN1qM=h@uW?;q> z!W^3{bX$SrYb)_F<^2JmxN2K1ef=AaKGAcyQ-1K#PAyL`!QYvzAGJURHhk_aTX);i zzuUW?#vlHzuSoE_Dointy5cwQ=Wgx9n@n&%t=9^79$u^s-g79QD!~P(Cr!gJEALa)y68u{vC*#HwhV7YQ0Pi23qR z7Z0}@pg2IN@X9v@4vzy{2;7QDo%IZcF(YL8<3t99G+tCmQ=#5xgD-h&)T5d{dr z1)DA2sTbha9Mbe_=iZq*!!TFq%;;8hM}EMf(k$)~-}S?TVVt=*i>lPB*m{K{r)eAf zKC=ALketmZV}jU-n03V6W%-sA7SLVbOAi?aCGeMzqt3sN>fRQtGhUe%o!g${mXi^v zBJdN6#65KfEuPx>U+Z5^51}6}Vg~$;uW&UX4ndN(Az$cT%_AzO=HYsSPhXEC0Dv`Zr0Wc9RKT_$a2 z+1uxiO?w7)s${@*;tIy@)X)rD1K_@GdEQofweEHSaN8%lSwS^l(iLgV73x>XkRnIN z^R+l<+M@w9#KwQxS8q2tU|U@%w>H9*&lhoEnU zu@qp>E(@E-yRuv#`C!4&Bl6x()SgpYs0P8HNeX)M}{Rpz(ID{^PC_CU$N)OY~^A~Rw_LQ zM3@u+Ph%eP7&#CPzh(gw=eUd!VVp?>J+lD4k=NGLOtyN-HZO`Oqg<&T(2eT^9g9Q^vPUUEqYU-|;QU>F%FS)y%JNiCsIvCHMt185RfK>b zNSI%`>}MXt`MBJZ6u{lj3FJzC-kiZKMKRKt8~7+{Sp@~2w6LgL0KzUDM)+Jc&Z*JK zS|tS1`xNYIyMoVuRa?Mb5LB-8tw)3*?W%G=lPggc0S}!$m=PNhrzf>Ak{e+g+NfDa zM`0TLahw-^1}Ec%N4)peu2!HT94Q8lgT6$e(iY~{b^keUr*>Y~#4?R=f5r)sG+x>? zS+o(o-yCuy!UA6P5{H7Trq2rLGl6e|1O!Xp~+U5urUMGorpR;4L+ctU_p|dt3wzq~k zamwscSfi6;5v)X;q8}8QYW;ZRMVm$wqW?Wi12Y=DH{ED_06_E`dtkRs=NNn_DGWB~ zS0o7`AeF&))5i1_<5wyNWyNQV3CoowKU2dEYuiFXOMop;eJu?Q{8T3wN3tIqyyvX? zpdVMF)EA8-`soyyT`twyHIL5K7_z#Y>Z#?7RToH+RVx&EwG(_+Ka$f>!Kx?4gjAlV1pAVxr+ou^9KgYe z)Egdpw&FAV4*zqXhQZpZe6WavPbaW2Q9PqvW>oRll_G5VkUAd5aZm@&jtZ$n1cy01 zPm()j4A@v?eF{i7H0ENI?8t)l?&8omdk^vA%jsXIoW?d};Ah$`XM7B=Rv zaAZXN=BCa# zDO5pwWJGf?zt)DV_MmXK$Vf&UyuH7uMJg%J0ht&%(Z9sO-NJ9JQhxK(N2Wh4Rh#r$ z!l&UL4}37hrVcVnnuW7Usx&`F1on$4cFtwoo6hqD<8tYh`4xNIN_t_(9xuUfC1oTK zy=gM9sI?3UU|ksvl3N~N{jJbz*qEM~=S2x% z)F%G*J_(&m_%t`fPx!o`t^KY zJm;83$Px4{hWelPJEcS~BCB2(+LMHOoYQci|8BasMMw`WInCh zT6>lDdt^#|_7yG1J+a!UJ*hBDixCJF6c{&*S0s8DuMDHA(}@#aC!a^fUeR|US5_sl z&eznFEgn{)idve#xS;YLKCf*br_-nK=b?x!HyK#8$=U(nhfzNFhyKRq5SjNyu*?t= z6(>>C+9_0hN-Hfe0Js<}pj|3Ik8r4|qfpionW0GLo01WwT2q|SgPWF6hy1Bwl=or^ zBF#YXnc`ZswXcZpAQj$dov}Xe;YxFA=(Ihhuyq-K{xb7D$2i!UpP3nL_*vL@_|DT# z!ob|{K+$V3I>9LsWXPOkMoUcaWzNDE8`-{L%0y6da$cyWG&G_gG83yA5bXThi&Dk3 zjSQQ+qxOwVt$cnT1!(dV`z81zhwo*}CoNDGlV7<<}kF1LaH7@I$1X-*^Sj6wf zR_14<5k<v85^Kh$e}>eiohBn`{qSf<8!RUfSv9cz3F$Oc_Am*?A?-a_>jnz0+c-U zstqg4v(Z?{pPRM#B<82S)3-SB<`BXGpbmQ<3umL+L&El@EmUIMI;)qZ?YcNkjv5s- zDG4SeWP+{FPQ=Qqc`=dnFP+9x7AuLMky(rpB>yFyYHP{0h*wqcBl!+u9?i8oStMPa z8u3;XW%&iqKH52RXSR2NC=f|<>505M3c)GDpMU~wgON>9vJNR%mL7!Mx~dv}Gt5GZ z@KBTD7a&78?`LNYWw-5qW=#Bp*EjNp>39HO!880kEvj%Z_KaZ2r4esE{Q_0zs!VpW zJ0X8)`o_r>=6<$(p=yOJcx7?T zM)@J!(27lVFDq51OS>zt`xg#ChZ@=)Jf=sgqeia1>~MVXaN`;cz6x@4MuO7q1LR{B zz?u{TV4?3dyE|;Fu3*Ia>qq*Jve)+aZ#=E9r+~Th;I^omv1212?43K?k|ZLjMfI&drEk@t zw>z{zxxA947Z4tZo}G$S@-MBG4s zo&eBaU(@!74}2tqX>jk$1TpIw&8x@;tgT=Jg$%-9Cb`oTlhj|YF6}v*IXS*9w^s`& zbnR5hl-Zs_tFNAeVVgrW= z(9wO72J^GEeIaY{s^^eGny#4WOK+;ymEJ?nL~R$5UM=2;0nHANN|1b^%=9st@WZH1 zz?~0@3+3TXUKzHtK6N$g9q#{45z5{Ab2D3g)yqq``Sc#-0HEU~@MNzjIIn4cWBm;J5m z^M7n+&jkRr1{Ff?S5~Eva(#W~A5mb$QKvR~xV}4-93QvLBFsEpH~>6|vQ*KR$_p7( z{uIJ4c}*vsRyM$@s(q5_(X;RJFGSp>MY$_tS`2v#6UdY~*h~81+7A_is^~M&S>$wX zJ5ZEHP$~-PUpG15>;zKUW2YkqM~YdJis^MGxA<^LHMrqzijJ-!o-(VLMD@x2qy-c(7*Gm`bxj*)%_H16r zp)&cYwJe>mfl3^*b3!{Lc=%I>ua<|S@4CCpFgCJI{ZyCb+G;vo-zCgoLW~IJq2M|jkvfl-&PG2ldVy9<9?m`E!L4U z%QqHp$J$K3(W2wn4D9B7v<=R?_{WtEeYy?{YuFM6 zn7yaCxz%B6-s6AvX00Hw4t{8;8UKvKK>xPpZMSzec0+TP)8R?5`YwD?vZK|+z&@dF z1ka4P(v%*2Si!jIhLpku6c$A-W2tSDV^`q`DPq09?)Z&LdBhYH&8zqk6FKB6vc#P6 zE1rMsi;PQSB3;H#{4=&I?Pfkhr*DlQ#s4nWSYlfp~{NoFZ|Z)9W(U6HCgLT2i8F8#oI8lMviT5xLXL51>{ ztYDlG0^Y5QxZo`i>i@%nNrC8Y{$|62kf>r~Derd8!9h;%!|Pl<{pjxiozFV?iP1*U z6yNq+Nccm06yIDAl$uq6M??;Oi2c%Acw?KR-K0ZnrEy!?N%pyXYK-*c?k}tQ>O!i1 zc_H!nubSgOVS$5jlR_>o-j@e?EAq1pDJhA*hSE^iaSjdk9c5D(Vu$t%Tl5Y*&Y(uZ z20_pqbndKk!yN)_v*T(_N0_&dbd+0#I()g1{8=AszYKgOv9hE@8Gvxjo0?sHbzhC$8XXyh)-=}E)FfRrNY^G>7D!fYB-Lt3hFx`zWL&lOC@q$cp zIJklBo2iA>RCw-AUsd|-tjYX7ov3=;Qxf<)(&oCY)ozKHgPMvh9M$0WZZ}!AmFMn1 z+iA3KgA~kw-u%FIjB|(QU58x%n4g(c_NCJs2a%@L)^3XEXvD5}(9LkWBuxgV9Mxpl6-a2pwxo~87P?J$cLQU@w#oYs z-rG)0&T8FKx;ra4K_gvLXz(Zb4QKO0!|XnXK$09HLq;ID|e=>yg=;KDvXyFWwlP*k=#1C1hjdJk@{e;fRB!vFiM{hPj1~YdPR^@Nqi; zc$}SxRm|o{KRy6_{wDqa@a5XRV#-?PKEWt$AP65$Y>9%yBI&~66Ktk2_pK?PY(UffWa@#!2PMVR7L z75AP}edir8jqv1>>#bMH+6DTuB}n?`K1-7+dH5H&N2Wz36xXcA?o3L>0PevOrMDktv^3`eXAPORe#%I^LsCc= zyc6ZE7F(rze>+;fV`~gFG(lU4O{{vuXM)i2Mi23o?7a#Xyryc+V!;wu7QYVt#T*HSB-;GTN_O2fQv?3IVUokI#%@`AOsPu?VdYi>zvern@!{X&=it--S@w~>2#mEfmE;HorAa5%W6 z!QC4SXC_^l80=z9Wb?V+dpDTd=mUT)7@t~GOA8PT6=vVQOwyuOW_L)NWH|2)m+#}7 zFE1=sMq{M9GT8GU`s}F;Nb1w_WbF~*>c*u+{YnA(nH+UBHB>3p0B2t_9EiHy-1<%{ z%gB7v+@?u)AIHy57+%oIZkgYOHRXjGOCj5#o&?`TMzhS8iJN!Z`xo;c6;1PTwL_rC z^lo6=HG5c)kYhS#VFqCmBQVH>V#Jlpp#{0vJW^ri%%kZm&$KHC3_d_>fqyp?2%9jH-bN(H+A`Tb6-Q_ z7312%V&ALhZD{@$jq|*m1ZLfC2}`S>p;Vqb44Z?rFSO-{KAP96U+s=AU0br^FbzcQ zYSXZ@)=;Na5|7-$urrd8`EK0$z@lsq656D?lMHe)UmAH{N}8eMd0|umxzU_FF}|d0p&EC(k0>iGP&}x=7f(A$5s+n zW>R0&J%>ct; zE?4sxddLY!(p6QUo39}#)7+^aj4Cc@((ANMv^5fN!dPcHFP)LKl@Dp$-B9EJFvHvr(xwE7r0IA6Fk+mLeORWA{d|oX_M(4VXYos+Kd}+WNp*%N zpbh{pi6&Gz<^kZNHyo?dPX$%l^9K@>ayPX&k|sCLX6+{a;8>ql6iPna!3eXqe1986 zY#sHrqta*z!Xo;ust(fn6A*vvppB>(^>q# z&=xlJ8Hu)7VUSx@h!UjQn`Y-I-taH=aSMD4 zyL&oG5~Si&2&9cYw^FZ~G;hB|bw&&;4_P#nEEFy9ot1?>3fHBjorSgG$Oc~U{;l!w zN9$WbQu}v&yh%kakiJk=W$s{2yd+BdR6(aEx+}@!IncLwM%)`EHy5T@1m~239U&h; z*oQ&+WPRmSc3i5>Vz2Imi&QT->O}=j$*^v{i0lDxLl(RPi`*wG{+yRKS}$&?AZvC9 z6Mq^sba=4BK*YyBf7IZPpQn*e{-g+vaCvyFCJ?=ysgjaVK?*9TS^AwYBKpiR^rus& zz0bU2J=~V13*MAE#9DIY)67KUFWusPT@~308~=y=Ki2p^VEC_MA>c`5W@7kgx6aGi?8D=e z4}+IoCtY0#yN)$Nc@c_J9!S~eTjGQ1-XNPl(8RF zs>X;>8Trd-U-jsurHC|MI5bIp#=p`@TSLA6W@+GGx#bVyQR&~uywe)SYiu6}Yxt`G zmv8;ect?r9S^FEFcD$JMGU~M+MaK2PKimKE!C&2vfspR49c#rxN8R&R)A2w1)k4sz z=)2aBuly<5zl1rhHGH^%$^YZtzX^EkUm99{&L5oaJ1WvoSoy;0rGQ8;6D_G0PKrpf z(%-Oil=#aE|Kjz{QN~Am{c@D}`;f})lUmyd3p;q(?Z0U&@NtB`pNjNB`ff-QDd0Iq z<;bKpQZkrK+}z5rQA5ozVsp874*+Ec0PbNSnh^^=%A>cDylpwblO49)RxiKjCCYl(=9UIx^vs=C6 zi?RB%wtO+5+LF7Ff+;b+3f5=^i{t9A+at!dKJGv3|6>0@E4mTa5M&y!$9x=Z{}y#r z>ulZjC^BubXvUY+f7bTd=bA^6ANUurqSDS~@AChO{iBGjUFD`7)!=B4k4K4rrIVw0 ztvSl~uSx&!ha9W5aW`+jf$-85296-?tBa(WRIyW6Cxh>59G&K;DT}A+RUo1^GW_JC zgP#LVf_?yau4JXVad$WI0N{K87^w`~-!a*@n?H(|9yqk)08kRU2sb zHdJK}08PCI0Bpq2p9_kAA=mRp_V&y^kJP;J;Q+AmY%ll#fbJjL`E&r-vZNhN8>0U{ zX=)C6@g9Ewh7U}AUu02SWTU-dZZ*`GH-7n~6*BKMGM^7m+TQPw@_C<7TCp`AId$WK3L&p9V znYr^vvS_YIPuS4h&R1Dwer}T8I{^HCI4SvX(xzTZHtvx_UEr3i2Ux<-NVUmW;PBYq zVQ*zr?1x^~2*>!sw_eOpuY2hZi$N20;a!JTas4ZqQvT)j2*Obq{S68~9(Cy7dI=qc z{n1|kqaow-Hty{X!Ba!z6%H2In zj6m~Zy<&^NdH!T=eI}(2XyMHCb+Yj+4%W;xM<|9#&9vpFQQGYbGBC z@0+HM!Or&jpU4PWQv7gRY9s$M#~`RXqRtOXUl7IG`#6BPSWk(8 zHv=BH&CF_KSF5?0PPRrZi4&KJRxJ1ucVmxnpmRucCyyBDZ(b${I=qf+7tIb=ae)k@qx$ z5`$*D^9C+-TJ>nmGF(STS2$Hae=u_gRXD(NR3ifK1PFO2Ms9shSZ|1X6#z-C$O3kH!LVTd5U=9rl&Z0}8l<(Ok zv0`;Zml{ZoQ+5Hh0$phNAGpYX=bLjcIT!I8ar+z6U{T9y@c&FGh?htGK;UGZ~;GrF}u$ z^*g>WAsPCfvAgOKOBB+~AGMCCoCnbg<3i`D5Ib(}^ibr!V{!fKhva6{uM@#Q3U*L7 zZTwTMqbokXsgWrrOymhl+5SWkX36-G2OT28pXUayOVdh zJpF9X1=ZVas$-VF%+Rv#-ddGy4qpHGNIIduskv`)=Jp`Q8$t@nqs~RWa=V|kyM)Mi zx0La`raB!84p}8A_5lQcIkrN`Wx`EaHqabo@JWlqy&ou^WK&?B&{h$_%>P`QcGWzk zNTB^LzpHa3t4QC*p@!I%BUvf0zBo`=Gp~C&y{l*IGO|Cz&3b@k?+}r)V?eWUslcf^ z%4}m4nx`X*8X$;;chl(H{lfzYUtTsg)qKH~Rr{D*~&@3$Jo@|M=JFT!3ppnQ;m_*Ja0 z>e{#hHWRV@K4R<{t~|4DPFfGPOmlYatM-w!qhid9;P;xAKlF+u${E8E^t%Y-r7Qxi%X9p+#6} zxQ9W)I!|E{E$q9ycT-F@s{_aGU5)6$)l`q)pUv|28C0#RU+^!1J(uWnJ(%p zx@gBAoRP|FF5Qcv6p*c5AxHwG+Mu4f8|0_{L>RyQCJ6c5*|di-G{@~Xo2J4Wv?s+c zuhy$9v}OatJ5_jCP=qGc zVaB#bAiguReoi_o3~n%i5$q2nJ9u7)3ir%~WnE`LGM z?6%MFqqfY@s|pbR^8uO>uO_9vlQo!I)vMlhUDnR_{pq@fhKYUwo|eE{kkO=8+RAKDFNZG}ru|^fv}J-w@3Mx_ zK#1Gzu{Y2a^^0+>DsSXoJE60&p*fP*YRhOU3uRCsta>5+;yds zv)_9gT2*T12Kw*;95M-_DW}?cAcGvcjrUH~b^Jh-FGPpzhzI-A@Fu5?< zw=$Da7~r60q7umw&mDsUE*+Zna5F2|5OI=$gAdFozs)Bqd|M4vDs9VXb6Uv|1CMbU z%Q2%1-PA#fX^_>O_rcgShCIPPVYKmnnJ9keV-(Rvfm}Gof+d6kmDxTz1@C}*JR?S7 zBq644zDGaEqTSLV9&Wdp5L{%CR!N1P@;v}NJ^yGI!G(_~RkMyyg(&Rfupx)elPx`YBHp`>}{=5rl$g@j(oQK8iY)%A}p zO@r>x@pYY{QmC6j-S4A>;QO1=Vw8{`>qWcY2brRd*ZK#LJ#It4GwjF?^M1?_?9|NV z)JKWE-R1Eri|O8d237GSH`@+S;OJ5=~1g5mOs{; z;O(gIw~)1L-t9FHF#C z5#*4p6js!mDkePyC6XtD$xkWrtfD%?u6=0x4xI?i#Afbtf(n(Y=RYpj$_eQU9rxdY z!nq~5EKdi-dzkQQ%MDlfjCZ;D;p58K#1>h!1BO7Ws&TpxND^SF+tfyW<6U}s?e-$~ za1HU#vzSU&gq4rvddd6;3%WilpI%`@tt8}bG<0}gyAVFvZa~5Ga5q3ODb%&zN@t@z?Ay;q2rksIzu`@eXWl2J;SbIhm3-$mJ~*QC z@Q?;LtF%j6P1!cmiu@9S-~MM*^Cf+RE$$8t7I&53eWL zENUYc9S8akx2SPOQq^T;AtDQ1r3HKxIi4!ySQ zX&I3X&^eH4N8tdT11q0gB&K9w_dYEWU#(TAyU1%+np^Q|BaRv({0eT&L#bh9MLK0a zGn0#kY?giv3!H4Q3&;~_A6sF->Rf5!vmb0NhDZC#YU@Jjo?yDCm@sv2w;yr)$~s=^ z<&Y#|M7|5PnNeNJ7)jT?My{?oo1PAw@5Qr2PSELb zBn#mg7#Xog^vcWJQkpY*pulkk+n98v{74Pj%O)vv`ztEKHqxlNH(7ZUrQI@YFfb|& zX=KlwY!t*+e|R#%M=ugx)Imf;>Dh#gn?5yTs3z~gaT+G8^kZ)qjYe4Y2>%jScn1KG zGwIx^ANKLt^x0+u!SpbRx*#xEnZS#GWlK~$=lxR$N#3MAIUDj$DZfdfcNxXp3=B^snP)yTL zp{jfsDG1&e`YnenCP&;&af|Ut@^=<$|8am&HDc+SZMboHGs%~~efRK0tgG{w&m+eM z&QNWqelX?o=jGb>VZwu8sICh#(^`c;>}EBrV8f1w*VxY~Y?i6vlIZ;nD-66HVO+X9 z+@LMUE{!RmmejDhqvza)fnUq?KUYY%ex6b~cC>R}>|vcQdB}$Ak}a!2i}u zKxY3X$@5faVd1(*@c^=8ahLhd_2uFBa)niOl_c6#7B(!p{6!Au3=pYo*Nh>N-Tc&q z%v5Ad(nn@WDW7~s*g3$C&dgs4Fj$0Pq8VF22&HI>!>Ldt%j03BlWh`d0eYh&E)sc2 zQD5^KZOu0ZuT!~m`_WIYt_`skE>76cjG40E zKe$mlOP1^-HX@<^6JZzd(=4368E+Kx!8UxXiZW!@Dnvi*c353|+W5ZHBU~eD?Y@mO|{<6EhMy{o6os;X)A#3LnPjc|4;5O+K$x z^zam~C?gZr$x`hBl5~_8?vGr z{3jN|yyf(hr5&3;t)w%sb36P+Ehr`|cu$8K9x0VcQ&do5Q}qfpsJ7>@-XhX%)=#T~ zw@SWUSF05(i^5T={k|+wb_f*tKTlcVz8r)uTN70|Q`O9DCsNeoZe=|aG`~s;hEM%4N8Cn#u zesVeZZg&~ua~YR`IU>8Pc8a3ASD|v4gCtR(`95J+!&-vxCtI4=nXafR4;ym0XpyJX z|DmQ%Wv9bk)oZ6Fy4URpTLkt2(zh~8*CXuu>grUZ%4-)}E7wt14$W*FXH{^M^)$4} zL7Ys;TiHGvd}Nr{y`9kaj;bafGJM8kyZ@BVB&@Wm!s;}2rcYMt~ST@-P@t+u#w-cVkLkSG0Fx6TK?LT4r z*Mv`0Yi~pzeh!AYyo4MZxl>fYZ-piWrnNmPp5a+ij`-_%H{}ig4!y_^1+!lu8-&W+ z&`?$uR#n;ist(yrZu%%K5pvT@T3C7RI#xta*-AO0#8zc-y=L)aiuDnzAYS(5uc3sl z=ayVmBe0eG-(zJJL^F`3bx6%_QpeDMLZ~Y~qY<;${cWvgUh2T#%t)rN4#zMb0m z3yFV*%&p)qTWLzjm(>Sr3WjHF?fV~wdcU@yY_Jh%?DPm(w{T*k(`M0c;mPFTx-CD1 zgM-%8P*jvy={+`j_QBX7oXAS?4J)g8YoKR#?oo3{Y@%+=hlC80d$uY7 z6RXSVku%Y|hp4RSU2R%*fvtL8a{Muitt7v0~b%qti z!M;y7Xty;n(J?v_k}v%&vpbE1WOR`rZkV=@De*2l;$;$cLO-8_o3iQO@eWBqjjkl41$@{13@>sqHw!4?il5sBk`RBD8d+NFJkvXDC z)dU|1=sTyx)H}(#?%Lh8TmvW~1=~;fkw_bDZE3JqdGGjfj_DK_gw4Q`>Qt1$YS*pY zo6;7){FyQS^pi#K=k0Kwgr|)5v!4f8Z9#334-lzcT{E743*?7E{~p<)qI7+8t?~?R zdBfQ(Qb&UQ)g>RhngqviG^d*KbJZ#~)iz9LSDt$$e+q{?4hf1~pyMPLlM0{%0d_{Q z8JY00oy*Nvyh&>^QhJV*sv;OMe8DU4^C&pnOK-A1>_m6Oks!H<)>G9|r8Ty;dRC?t zIXGA&)ziOA3TlrX?+u^jBocuwnjt);N{a0DXr=Zen7+9hJmr}?#eLQf8w`W3_G`pj zBWir>UJ{`2USKN^}# z8wX5zTb@@zp|Vq3>{r$jZDCo{N1zF>n!0}!z2E;EbkCr!lc-39Hp+!=jTB6^-UVsc z%51*t33@~Gbw&*2h~KfFFM6)ju4WTx9otzQ&@wi6)OeSYt$gZCl*vF=GL!7&+mX+^ z!J`mp3l$kN|3Gl!C4-7!!UcDJhdfSevB_W03cfnm9z45~m48G+^o@Ge(<+keIXIUM zq0#ggF6EIOCN-n<)6bl2Nl_d}g+aDCD-BxlZZx>BhJ&LF(})ofFVujo2~#_)thz!? zUUvx@J(y9?4qrbK7~dO*-CFUTymeSzw`YdVEIW$$SH?$_J)s8aLkAM9EMY)*qu+Od z0XBrtErEd8<@Jy@Y%^1=+8#J;G3`s#w~JF&emQU_Avu(ZhewHBUmrdyCw432Mtr{r zB@|%`O(xXUQYF)9(H4ZVqC@Ytnp*%Bx|99<{{eSGLnw-so_jr*ctp5e(P4c`g9_Bn zNQT#P*ziX2C_Op1BRNS-;l@7Lr?5`86>i^54Fic|6qJRj%68V0RA>_HZ1S^9TCG(C z8o4-NEy`a$&wp{2SxYjgT=%me*jMY(^$M)KWB3(oGDjYtwZJK~hb7WbF;9hGv>g`a zh-16JuVI09332}BIIQ&}kICulpvhOGYWasCS z#L0#0uCVf`z>QVek|Q8Et2SmDr7bw%GinW?o5S)Ogfp{(_0_~VqhBm#j6sn2R)Yh; zcVw6d6*d^+Q9Kfgrq|HCMR$7N9LWWuQ{l}YL_FZzA(gmRrBVA(>5GCW#Uk<5*5=P^ zg!QfK$RJZD@x6nwBuA$&Ex)2(PP3Ok{yx%(c2sX!uf)E$Z|g{KZTl*F1#@$#T^ANh zzOug%INkBSD+bI(Cle1}nB`45+;~d}y|J~Z6g(5wnUA~esn{%3$oSn%(g}2I2OPzAVtK6kVrt0mH?tSfP^7HLMWjPB0_@n-h@%W86Yr10t%rSLP#L= z(2IiL5Co(Il-{d=G^L5}7d+=U=bn4cZRg(m-uM1blTG&CYps9nwbt%y-DD6M?TO)- zR5g9Ptd)^n$E{+O*8|l`{kpl|yfQF+{M}AUtvx?$A}wdaH`Q8K`o^y%^IOQ# zN#;op2vBJHeD=k%wl-5md`1b}AoU<-&-ukITbQlah;l#56^TXPfF8B=QtQz~9t$z< zH7#c(U)j_n(-s^3YVpQ>QP@0L zNfyR3i;`AiddH9txB6Q}cNf12%rfoj>gZg@q#6mZN9Yktwo0p~BEOLxGs^h#gqUr* z&voknHxCCMQ>8F3gQ@lcL{$a<=#2e6{#B-haK0O^S<@WYM&`3k=L1`GEAg!Gm~%2_ z8eXDh)-Di7SyeXGKd+R3tEuQw30HoS2$cI#Rp49M<%b`bO3=6_VS>3Oow<5t2|qod zyxJR({_TM4H1m(+tY4HP(UZEfWlAtaY?_^6#5t5;or$`}l{ut^c${^^;h)=Ljh4;B z=sM#p2~+&_IS%SUBaZs2Khy7h($e%dJ*p<w4;l2)um zh~MMp`I|K^9=w+Y#6^tL3dmv~`+NK+EaF?MyPXT8ULZqjhUHdLiYqSUCd<3Mc=t^k z3#`4H6L0(sI&nuu+3zY6+k?Y*JxXju5mauLGja~W-!|J+I+-RR@tbi*2(py@@X^we zoW=74A7fm#$8{W=mnJ>`qWv0_7t?(Ms*iQ!YZyshVuiPtuLe_WuxSv3;AtH;56=W0 zJOr#3M2=J~wsn6v64J+w8RB9*!kkSb#x8gIw8nnZq!Y2}CbqB^w?_Sl9~_qD|Ja3H zYIoH51JnO1fA{~-{xWqq{r}mrEm8lw#6jqr{_>i`-tC@8q8tk>D_nbXV0%%6u)UaZ z2eiAsJr-T!#b+i@0A*w$X6`h(xljP+1;L_i~NB>eY|sQR99oMZ`4) zoFQDRIk6IP2y;fDKC&v4<1$fyDYoci$aAT^OmX3XS*7?`{Y-Auh>-iqV&+?iI+u;x z8%IpRi&!KjND)-{mr>i#~f`%{>7I)wM~3(7WM|1}oNRD+y~1E21R( z;(_(wv?V}Cul-?(W@mv0hGYzA(57t9K@c+3HfyN^ul`Wz|A9Yt2~A4u=DlroYJbD7 zUSMlx$({2`{#ZfqXHX|#B7-eo5tB}q$C}8RbCd%3_&f|Rt@^-^5&ISDhP<<`F19-T zD9}#Eqa&so5XVe(ob6VdF;j`+IJT0n(A5x=wh*dM6FMGgsXLC)#+2A9EtOXGHXXH| zy}l-X#s`z`w59_wD)z{R;v1S}r#h(UF@v^2IxS+pw`+9mBMxaY#d8nQ*T+u$RInQM z$b*3ncaAOcGvnxcSp}b<;L*xYl?1?J%%sFigwiyF@8pue z%S&3*FQv`ZD;r&9HGgZ-Fx96$9YYp!L_>%S4c;V*%d63mlTDk|j*=VCq!9k960kEa zX-={sv*0F9qOTlSkF?^AW~4q`!dIxzI2r36x=0<#j3GavKXtDpcsSwqsMWjM_oBQL zn@q}FUG0UVo#XfcM@lQt%!q$E3JwD890n&pG}JoorM@ft5Q%Zj za+n|_;(yh~aV=T<4b@fIKA2X`l+oXccO^AGe8#c3xNp>q`P!2m*sdcT_%yq)D3VDT z!g<&@2_i5j?Pkz5IyPes3!gz;8Cn4$QDvfdi11{^AYw#qhXZdYdV}jXZ*w(aN|n zMwg(SoVR?a^aMCWX9ANbv=w*nPiRxlX>X^E9t1+qI`fgx=<2&gqK&{4anc82b*=AGKYtSC*dkh z!0kjK?-nkxSFKm&L%R*AU^RW6Vnqa)T9@8=>gqH12RhUy;W8w(qGKp)gc#qSBv|ra zCG!6g&OztFh*xKx3lhCR2Qqeh>m)h;(iSL^&A5(AKu{GY{OPRH&!Fd@o-GF{o2$^o zo?>uH=1jPIQ8tCSU)`xb)9Hb~5ppX?CB=U(bPQ8OEG1Mzj$_93HSeUQjqF44$wyB{ zHB;8soy`{eYM91vC&R;kpQRxqrh4_mm_lxP^z+p7oms57y-EBliJesFhtuzwKG!cY z1rZ-&31x5D1!+?=ZN&EpsA&C|W+7bGgj-+9D6`Rl@5ascq8zO35X6H9hTU-?!5K+% zXA}B+;{%SqH;7#i`ooUfu8@_EnAXy}&L*Fj-Ux+Wc6=vA_kDOZvmEHA_EE ze&RvR#}vs*&r4MLm||kW>3hf-a$8aY4Qnl1Ix(f?ul=94DHtT4@S)-{9sX@NnAG?} z@4Xs(iUw)FVk?c?#nlymRLiEKxID4wO%+%e^gXcQJJ=rQ6$^(`9fT?PDJ5zM58lH{ zt8s2jKH8%Cj#rTC<>FDt#IZYxthRv;q1cXh?X9w`wiL-!%R3_c!hQ?yfqj>bN z90zRCqlZ7~!j!0Na4Sl>`f?_P3$%-GY)W#|K|D9p@Df$*mkR}8grdp#rnL0qv7*%6 zh^cps&JbZ+?nf_(c!QSx6H)sr-ILz$9?z^FK5;x_Bmho4BS6(rF(SiCit8M;T>7J| zwGd+{8V|zbeEI^cozofiQocZ2_0!-i$eYoe1#a#q6pm;xXpCOUr?xOHS~aYuFJk@< zpTk_vISY^3nfC0FOx^L&tXpYGj2B5CLt?uWF3$xiZ*UuN%UyvK(r3nxFvU<>RyGQ8 zEpc`6Oz2EKvqD_GUVhFAmz9Tx)hkRS-*c&0xpvY}eg*foz0(h}v?PJNtTC)+hCNVe#G#|c`AQyyXljso%NlaC=#m@f{Ht_|NL7A@N0inD06nsoq%Uy zE*ihV)(lg72a_s3JfUjeo06{V>o$8$wbdA&>+J5a7ea-vmQ_odQWcD)TQn2t8sVzG&ocxyBdN{7H%^eXQj}*w=tZ--(Bt-cE~cst-3+jN=%V1Ig~YT zeDA3Xb(37AkY{r$+ngAh8IdBd(Lq|DIxGo-x6bSXlK|V&&QQAQ!tH z?QoMmrSOJc2Fq-adh%`;#!2bg$+^X72W_mheO_(2PaI!u!kkl*hZrL!R^h_?gw2-N z#1L(kk@X%0p%}LpX%y)gjAZqT_U4bTS8pF?$QqTWYT)_Ae`S$)6P!wqv6+ywv&$Z;x5pz%^fqC#BMa|SW#a&y1ihuz(mNH^=#POq?N#6M78$w&kAJ#FBD&x2!#e=rlW1)2VARQ;gA>cuy z5W}pE2GdCEFtg6N@KGW=cJ-VvY=MIc_(3(W*nxW0YyN4JZU~| zob4pSt<)(BQh~S;Zi1hWOFxiNls$i$;=q6zkPt))n4Q*};Jr~$@r|7S6Ow-zc6=Wn z=BRVNq{yYSEmqdRYz|kro?|NN70EOAao3vzfRhEh9$jZf4Tq4X%9N@jF1sR7g9*cX z_R3DHW${imUwJSjQIU?o;5c1x4T4wB4?#`DGsWsuO9UV6H>AmTK-6@!^{K$&9`ZdK z4;+ILL-x#;LJ0P^)i{X=cl{#x$Jg75&+xlP=a+k_Fz)CYV3g2x^}w4ymim9;ue~MC z8h4HiMzEEF_F~4msKT>Q_z6+DN^bq6hWF$&K!FLCXkMx~W5tP>RI72Tl^urGXtdfM5wv7f9ELUq%<&>8}^z7Cn zFqshE9%mZg_X8)-jriPJe$d|Oo?%(j%0bHe&Wb_8jyH|5 zjlgpf=K-%)OTIEjOROp;7FANb)y8zLF2reMiHM!Z5l6zK%+=}2bAz!8$vJjST((vg zbA{k~s(tvcy=5`?UBhD)#3O~H4N%Hd(g z(I&lZHeg+DyqHnG!1#_X|J^*5*=}Sa5TnY32>qyNo#u`WH5ptg4?mV z_w~cf8UzLHz7f>_?(Ry^v}!bha=sUfQ+D(p1je5KLyyqVbHT?q?q89Z0}1|ZDt3Iv zH{ZzKj?MDBLG1CtrqI&&cb@$dC_bir*&b?}ayY!r*Kpj!iKaH4MaOoKVETP~1T_dI zHf%-TYy?jfZx`a~gBWa!MpJVdL-m*J7$P~BWTGyXxLTtzL*R3;h)x@!YjY{S^emF; zv^){o^HM8Qy?aWC4_rT8Sx`jPw%xCvK0NyImQK+^?fofGKF}viy|2j zx8n`Qd$bRJDjtb^M>Zo?I9HOhFLLM$uARZSTU0SH8|A>};hLU?&L^j=t4LEQX;T{g z6}WQGB^8@EF^)OcQdQJ(i=T7pw#aGbD~X!n@q$bV{Q&_nK7l%A$>Gapy{`K*K&QXu zpr~|O&J3sBi{D_5QIp8+K87N?oPgqgtBr_j3T72lZ)z`HO&QLiK&RW?dp)c#d?1K1 zWf!s%MjnPF|4wNcO|*4!u*jr?XUbe_iD|Jo^|{6Xn3C+QqETKV%g9_U-zA!gM7f$D zq?TTtf5ox24RmrrB=vX7^HMKRxOI>?+Ao!>#%v!m;8xW$?~3>?#0Nf701M7I?s2<& z6QXr~LeepMax=U;g%>-K33d$k?a9mP^iF#Fw2~?OYYi~ANl*7MD5jD^7uIaNs$yV2 zy!uh?MaSamuf2Ux7_yr><{M3Dx-d~lG>fg2D+5nYH*PfF6?F>qLew|2I4@W@R5&qy zr0=6LWBqI;&tvmRHc_M-72NmAG~(%sb8Pk{N@gjvXF#c8%G9*!O*P^~qtZMP-J_jx8re)*&?m>XXy_ z^7=&Rq$cVpksNQC(2rNJ1k0JhgZ94tmRbKbX?tMSVs&W$D@qB-#*8#??c{?bcq^ha z%lOKOk5l3@J#E8u*;*`Wb zCWL`-)dRq0lHad9z=Ac1M_vq$M5j9oa*E)ipM&xfvJ zrV`d=0VhiS`a|aAlo2UWlZrR%)pRYU^C6AoY`L`Us3Dok!%83L zO^fY=$9mFA_0zJ}xQw(rNP@i%9}xP~+zwM6^+h(iv(x_K?D_X@ug6H*jXmogPIzp4 zG1&s@?mx$iD~yj}6zol4H^ZVd<{!y>mT|L+B5CmALuDnARcXhQc-??wGg<0#wH=Ey zuBO^b43Al628wVoK8}y>V1Vfr104JF5nA>29yAWOn+e~N7+Y67FYFvnG&429E%DY~ z`$lg5n^ubtp5Pk;!tV65a4M@bM&7`MM-@Y5xkesx*;h|Jwfq@zKbEoCe{Gs>C_6|) zU)H7FQ$8qv;ff-?8el6*q+Wz-3Bs67@p=+W8oJiVGox%M@EfB%h>^r!|lE z_w<(jCScemU+8Gg&7q@{vhU#^nZIcc*!x>0AyG^L=^sA$8`O;@l)2L;4NBIjm4jgA|VpFs(G!(V8;j%kh8lc6SOxX`ZA})tDIt-o1 zv%G|*S6EsGx`Yee_O!smje+B~hUAN=M0g&WCYLGEU?cZ>uO88MkAxON#zaRsop7Sd zJ!^K%uy8OpDa%Iegm@&6@_4twkOmRl78ariHLkzNCG`LqO;HMm6yj>ged-L3mX$T_ z!DrBESv!LG!E;ErV2@+oVa=w-CM_D9*&}jk;IfXX=|(;=#phIVNn!Hgme;K*S@y== zWqd>0B0$s-*FM4wMy%9LShZjRiKnvc+A~-qPtctRnOJ9FsrEBypqucqi#Q9W!ETt$ z>$}$4Uxd03UAdKWIJBo}`nsmcjAP9Pxwz=iG!=}<3`@_eg_-C~1YSMi>8pNG@FE!7 zLA2RlJvXr>MXug7nXpV6J|OEENAZ)$D5=xBbFgtinH3>hcKGH{>j$Z3H$)Z#?V@F0 zQMlMM*IzZ^{6+kPq@}L%N7M7@7#m46r}8Q(!PwX|y1j~1Q-yU2DpxO;kY46KND&z4aWzx=xGTSVoz&!8NSFQKB*fNAUt3j} zx!*fritP+h3hS6EP2cjVS6uLc&1PNHD<@%GxHNQ1!5R(~TboiMdpTCTGwkE;G|Yr- z)sM;(ih~2%{(-0E&CD2v(@aG~k++1~$M+hBUPsG{Xcoys@$7-o+$Umiths3>dx9DptNM+?H*1+_Ux;)UKlYGkt znSC8hSUb{L-<9L2Gx6{w{(WDyxH^Z~Hod}PA^nyS0{=CnfFi+B?nF9`j zPSkw~Zq`OiL)ES3=FRr2oCaEX_d^5@f>qJ$76Th*qzcT`L+ATDEjDk@DK3XZIPs#R z!`N;}u9>t|)f4@@H3r(NsPNyg3>lYAt@JW4VX6yK2FG}U)?0TS1`evPp2S}H0s9u) zK^69O@i@s^G4;`@>~6Vt`2l5cY~fNyb|%9mCOR!Iv-(Met*Fyhkgbm^(;A5irV8q) zPp5aY{oa>sX{>#fihFv+T7NoaXMvdRS!3<&~fI`Oppc8?TRW z7~}gD22)lX%5og37JupkIBL_&&tcKZe7oCRT3Slyd>ZR5Tw=;t1g6hSR}sa~T<$b= z>nB^(Fj)f5K)3)`xigy!CN15}NwZ2s%Hx_c6B6_;Yp!ZE(^~5_K}dEIonEkbHzu6z zUtf6wchQaoai^wt!zLI!?Hg0lJr@zQgx|-&2h%jxg>|V#MUCCg@UqDgE=w! z;(`_Ve6!9}!pJHcMZ5!)Jehy*|LUaAy)X+-!qFYaW76tnjS#&3+^94C~Rq>3L z6Gz&8mOxrjLM&x4nq!!Y?L?L}G1j@*Wm`0h*htLHlOupZN66joI$2b_WqwjG zbtPym>DrVQ4tiM3#b-gmoq>>(ql(zg4|aG5zF6yy_qy5D9uMz?YZRV?voXgEI&Ait zYY5aduhPiN*^h242kiohKGr0iK#!Ft+BbCDam-EOs7zf98=^yZ@*b&kslP(Do+&j= zo1R>kXGwG=!kuvNY~oL&Ljnq5pR_zzU*8??k!{yqC#E1NF-AWhd&<upu%$Y3-^UEp=*+7< z?0T@+#K*3@@+sM3v2u3rm`*V=>m1rfqTNkL!ioxQ93S+Hchi}&H|^sSax)l$^G=&d zw02?_Q3&aXXjhK*$<5)1Jr71zY26y*TW~c6lA{=wWH`Yc2G1o@B{N3u9oKQO_Z+#O zlvLqgQCghirq<0q5+ZUJK?OIO%ryend;1GQ^YdQlZ4CMdp|$HnUc7S{+jDP75Zz5H z=!`95#F$-Sbp2e^yf|DH!&Kjt%|PA9$esT{WDKboCiAwl{eIaVQvQ8y`gVQNuxuIE ziz30_6A(@jxAO`7>+)^D)@!07^PPN|n_Q!4@@pY2n*D2$bztRb-k)WTh90?)J_7>T8|7Vb!C`osLTArMow*2g5i)Ob7QA3_%IUmbR| zIm_~`y>?v!)M2vQv^~`x!JE-;9DF+WY1Qw4jClQj*FMU=Cuz$fkugM?7k6}m78p{1 zEvfA-2&ojWy~mFX;7JM0&yfPI<49#PfLLQ$xS_(_{0?+))kG2K{iLfSJ2ojZEfI3X zHP{-NKoOlAO>op&u1H+Jq0uvdVhXjcP3x0Ho^I+z#GcC0JYKk~PUQp+70RXxG`tfj zNalLiU5jn>d2SSA7!zTGWctcYO+)zTT44PMF9}UgIp=<~E^OeHU(f+7e!2wPHKG1w z()iX!l&bnFg9VEa7_9tR-T=@@ayPUQe-|sVDlrFK~x<+ zgTo<@U0_A`t(Fp4r79GNvHy9fl?IQ$xXvvg=(d)2q+yoVr$;j&TdLjm zV2mj=NzpcROPod zkE^FWmI+e`VTRNg8?zPKTKS1NVivq@5ll|eOCGeoR+XrK!E2C@kmfZL%S~l`y*^cq zfH*?k_lpETSTdKRoSl@8iJhN4Lzc|g{Lui<){l^huCY98F8$&o=#-7fL7an<=mRP; zL|9#-o_ww}Jr6kdI&2-7!gQLaxw*k-*<^4=O;$>57CB}O+x)TRb(F!b!O2Kn6=63I zMI28UF*A)UCIEKSk$!Uiqs_9{bbEwh+x-W$%+fk%^WJ*qiPXY-VI&h{Q#IoBh=q?UF|Ss}p~x2$^!H5* zkh|MV@!XaD&Kfo%&vrw0KhPT3RQPD%VdEk(mle&2?_5IzuKAG6gs2 zbp%87GiD547?yRCr(XK$vGLlWSbsx({+zOXW1CTJ3aECD14d~k+|Iyb3Q44Aba9F) zCtz9~jgjK~l*lVO@4erTxn2A~O#=@g7g_dUT^$biJ~^)XVLb{VxgkUdYAd*gmg*>; z4cZ*9neBCz8t27LLAna1Y*p*3+fhavJHxp!bsy~WgA>f0M^LXck9cH(R1t{WEHrG&Z7iOLyo_8j!vPTc)c zgYpya|8-Smn@JMXPaVQeTzKY?sd`SlY|NydM&O6{pJW0@9WSe}4h4ohG(7dgRelj; zpQEq$!?wO8j;tDcSdD64+nqdQ#d-MX@OBY*&>u3dE4u8~tf|dBd{&g_P?qv9Z&@va z!Rcj2hfy_8W9nC=LUS9ejlRjB+;j3XXuG7pBs_QVT*|JN_qo%xzdzhA0|))Pa-*Xo z%+lJzOdQ@{v)iWi#x|iRquakk0p~y+vq!q90vR7+CA7YnfTZ72JyggZQ(f9pB;%4s z5k-HaJ{!S^VQ*FsH2GVSgfvyZr5NP4`GwRo+jK?-?fbW9iXS@tEnUL$rJF~HU5KG+ zV*`|TKlOE|pd|hqxgzr*Rj+YEn|dHmrK*=_#r5KTxh+uDz?r#i1lLcq#Ss7d<+ zv2x$!M+WKtCtBf;Eyz{-i_o?h?MRPCQ+D9@VsdRIzOj6~NeXm#xlnDPs&A!BV&V@h z_@g9({tcNwc(!Vf5iYEsJlX~t4}qX`H!?01%Q1=tx7GFOXHZYeavk6r^hwG1G3*E4 zatR;c2KKwuF^y+fjmi)y_9+ATFF)$%atr+-SHga~*bOV~{D&lAP-@P0;^20TyWfTW z@2`4}kMEbXIJJLt8RHMzd_pKTwO5=Qb8de#a3e>qt^!}Y=Cq(VCo6}oKKf}{wX$af z)|ZnRbr9XNr!ZxqFexOluW7bPn2H##WE2L|bj?wr1#UPSo5qXDn-U+c^DPOTi;hws zs2L9ZEg={(qme*8iNBkwQ&%Oeq^P|7^5^XNM@3!Ov+{CVhYG9CvTU)HWW1Id6=&cQ zY02KYYa4iAa6Q+QNc)w#cA4TH`g2LE!K}k-l=LLTF;CLoYA{YWs0gUTAEQgYrMmvYcoF!k%-v zxM=iqd-37g9(Z?>iH3f!aGew{9d8Zw*uh)CqvAR!?_k0S8e@B&@WcajSe^$JT#E3zZ|X)lFa zj->~s%^)ZS(+H0dOaoI>WG(J+U6SyN!^jhb`0mVboWtNSjZfDvdP8br&>_SezXAq4 zrewsR?8jn#1+#&}*iT$KY5EydlyDl$EyBB+Uy^z61pdQHCOo>+kz$$zi`F`=z}CP2 zD(z{R>GR0`IQzpgGDK^+U)8nT*>mou_Wg zFP9tp{Pv9=AJWhx-zne%OBXbZO)_U#2krJNctcnsAlJ}iQhZpw}kTrT-wVQ!d;x=gilbB!N>pwfwfDmd}M zCnU~3kGs|HGG9*6q@>8}fg8gFzAPy`hCD*eq1Wp|ju1|2zAMnFMrEK{^P%8hi>h99xv03)N%Bflj~2qt!Lm3jz0tne}*~vUUm+?8FZD z(M2ou8eVCSpvhh!+RK z>SAF^?7GWvJ9`t`#}kRngj`9zUXwXpcToD~(7~763L=QO9RK2J zTA5Ho{}3?XiVtyKC)#9`0=G!Y>+RVAXtCd~)#w@uXu;Mj{ObZ)qola0=DJ zErOF0h;V6FXn5E|Kx^ETM3WxxXm4d(c~T`Mzr+JJm@jlK7N(egbKXtDLHvuK^st``iP1 z03Go<=mg;^vPZ`Vb43xuiHR(H%F18tKeajW@Y2t%X|i!OJ#Cw!$Hfog@pvq~Fk!r} zDdyha66P)s3gElGJ(Wf0zEpqAx5bS;AUQgjPl5BEglHkKOR+{bV(eRge*JY4zFT)I zPqkeXh=C3CkDoz51~xrOc$xMa=x^^O{==F3p9*|C2)gDIuYI#QOvOIE=yaBA zPgp|Il@BdighQtKrLCCkcUyZarus0&Z~e7V(GjC5!xTXn0s+%H+d-{*aY|jd@3N_y zUTNg7soFOU29yvV9U)||h4=>pwVtrmIpsc)^tJ1LK7MNO!O{2wWe?*(;0RC&151Zi?$_LX>qbCOgrEj=!?Jbug^b!NQ4gecJYqxf84F*0{Eh7 z5_mjjRVY-H|Bg0XS>I_++%ziX`{Umw!q+qHrPx655(k^Nx^;d(7ZNVS+k@jjd{d`{ z?|M!x%sO>m@+TrI4TxI37UB7AcIrO@`3DOACC0zX{t?n1f_J4EUQUEbemM~&FuP3| zA*&p`n&WaK3@-1U&z!ffPnNwvTnW6;>2E5Jot)HX7Bda0bsnp>`Z+PnY0;KRS3bhO zCA0K#&AHd*)IZW%ng%#m*a6InvjGCu?0t>zZp;V5Kna_8q8BU%|55fit@L>Ioyu=P z?9sD--)ubT*C-$c#VLT@tE@%7&6fB_Apd;?waLcgveNDUKs07=^?|X-hZTAEQJpca zaoXdTzs(*F{dd0OKOpFToCSY=9j&XpX~}&l;(xM)m%>e4ePa6GJ}LdhvHF#CUPnB=R{tU4c}-2BrfMSB?1NFblTfR9UG)3?G%^zIFP`{tc`ISk zl*#9@Pl?-Iu1b0suhE^TIODJVwq8a{E9=6?ENdfy-l*1H3NGrP@BT6|-_5=4Bjn6i zrw$NpuJ`{Arw%xhmKIA_K=+XD)?P(=k8aJ?dRqys`|jl9v$P>mtIVt2_l|xL9;97^ zt=N9atu+iN+&uSA;W;wMj+5-5x_{%K$%pp$QMm(q6dq_~ZQxcl-{4z{l7j<6SHTrR za<)ANKxRj>0~)C7&)a`cC}x)74V2L>q66@&xSjSUYJK1+pL-`KzFic6vm2SVfloU6 z;cHQ+`w2hOPysAm0M|}Yh37iY+UZxjX~6;E1%CqFeb5xP4M^T?8v{`7dZz7mq0r`? z+ON@ea_`2r(Y$Tk#$U#LcW))R{0lbWo!Sc5b%MI`w}C!yj~>ASI6^1Exk4XM+feUP zx2yN7ogxKj`8`GtIi>pwmZWt(qP`86XY{ij+RsV`LiDWmSnUg4eM@-o}t9Knw- zzu6%rFK(MhEp zM0DTwYYad6?(PnNH`+z?&!F0O3cM)^Tsv@f$~uCtf30;_bcY-SSMCn;g1=Iur}H(n zQ}OSC5Zk7<7j^&cPU;I9PPoU)j-vdAW>uqrBE1P@Km#p%4UhJzJ3_p4BS7O8aO5m$Zz1`tX8TXw7@~G{W zOW2W>9g+M4oNb9j??~jtpC!_wd52qH1v(}D8UAg{Hov}Vi97GVK}+7F?PRBS)N@D2 z08K6t^4L+&KWlRDLHJ*3vg2ODwkgQt#Vf3QF&vue$tOt6=3Pr zgz)3IYoL^W*opmd?+wFg62_V$mh>Z?OM3#i+zP@s?sQ*vtgwHrC7*~#a+{VWOl4tbmX@}X&R*D591i?UZ(L$dVKsWhMXzjbE+yhmjNYB&|2xCf5 zn&cBtHY>$?H8`5T>n|ix3KF}s5-aeCnE3EMiKgdS)~dhC?lXoJhJ4D7Ov$t~3gJfT z-zWCV^k_-*SLl&z>V+!0rKE)BFBUouJY~XVCWlARq^LM4s)}`yMEP0-fs( z(-d##TAOP?=t+>Z^j(*QlC?)#=WZ!)k1GxX# z#SQv0DR7fXh2piPp*FUQ-j|^{ZJ*kGb5Nsu z_zR-Ri;$|{QmHsQ`%h3mNReSPvk4wa#MOicdm6t$qp(fDVd4UZ1l`!}|bs)$zRSE8riFBn4C9L#P%XAte z3d&*4&SghA@A(IWc`76Bo#p+Y2OOu3h7HE;>3hkOQXZX5bbX-lE->BE!4B`aJZC@9 z-A)xWco0DXMtDe`Lo(5Q5&k9K{ZYE=dOfE7s8zUZ27N~RTF_`FxAa^H zcEU=nQTvS{E77=S4JS0MqnOiSCR z)~%b}_|kRDGS!A-zQ(iMyBbme9|yxh00JNZ0%-+=1!=$A1L)2deFSzHc3lI0|NhwX zYu}v^y`?y@bh%Ocpc8jqpX33>c{84fAwZ39rG@67?UQs99C`PBc;lencY8o7`v+u( zjkAvI_O{!bACyw3tbFA(=)0gD9p?rG0Wd+k-tX4IF3{?tN!}fUElOJLbmcP^nd^9IiSG)9~N)_2pFJUyKeG=jsO-21f)QR z2EP}6FlZeF*nqh+enCe-pb!vp5HKg8BSqEPAGOymL962C;ui1Z&5EbL-qrdW0O{{P z|J0-KyBHHw_a;As&O6ANeUk1I9sM;Nf}PtN-*nU{rtU)HiggND2BPQ{M$`^CD$GAX}gsgN_o4 zKx>%aqr#&O4`?S|-HtZn{!Tyul=?vAhgU%Y8ELnHQb)XaclZu48fb($kQeBT4nBg< z%S3bIrHJ9utGz#gzCSqltNh~c65xoK@!>s#*OK(F0c{Q7JCbt$&>-;1l{hFz21I>u zr%&L%1_GU)+g-9t`1v)U1-*6wJ<92AREf`k4ykzC*z-71H>jIWvi!8B3PJ8)NcsEE zu5928I^cUwCUS5W$rZ;FPxLfk4$|CASbM~O$#RL=khX5fr$a?qnF3gLx11-Y4}v78 zo?l3k2H$?yu6+~!p+(a%!l3U*i5a=YA@TF?S67AZFa~-H9KdbE$uoOI(VibOKg#<{Hb5jI8xl3q?qsx0-OznL-@Q^5+aj{lmqJaF%I2NwF6h0>L$-u=!z~#_XX`9}k!~)j`T( z#?&bG5eahCWwq&?b1HHQp<~eTib$yftFQQaMN8PyU`8HJY!z{hPEt)OW%k?>BIYfu zsezrf)_a;h;`yQH<_8}oFRvRn&F%ckScMO3Rl1r5d|V<}5NGV0cpS4Spj{RhurJVu zDh*LH5aDSwwZ|4Xq*H`QV*1ob??#?L)tQ zZwl}X_Gc;kFSPc@rDByp`z{1+EBzPy4p?>&pykTkM*x-F)=Da%DAx$e+4qS+=5Za; z`@tWbOoON((91X9{d^6ixLfqa!mH~FiHL_+><&AQ=H}r!n+x^n%ui^HIC=^8NB-O^!XL#>pGVVsNoPOutz} z*iH4XMSGd8r{MgcTc_&hxQ#X2>Ho6u3gYp3oE z$l4-m_XLCT5L%PS;J#GpTN%aJJAGmLqJ-PF_5gQC^mj|fz(s$beq*ZKce~xjy2zaD z#x6e=o;KsWYGHP$e!`fC;@02y`W_w|>fwc@N_=(EQtJ4u)b^}_{RWl7-%g0YW9#zj z2o5qs;bc6sFO|>4k4j*3_K9}I>@iwCFt5Iafm3`P>gDV&-D99wkIS zSe!LH<^gsxt>4%|n_8{>bQ3c%8l&<^Xz%GZs!3u%bBLq~+ZzXQb!_}~)(S4qiDwDN z$DNjX_Qy25joz%MDQS#qV1JaAaAK4eBih^3dDgyOFMRwoshpNZmg=0YZXPzX==O9e z*d^;BT=Xo*b13k1P-5x0E)BC)x)Pt6T12PpAJ zls_yP7r`Iy44-vSbLcNE&Cir237VuGU&$=TXN-D-eJHC*2X*YGG8Wq#sFGw#W_zXs zZ|UiqR8Qoy20MM$vS+o&hWBYc^u~F=8Y2#N=FET{!m$TRbmYtl?oPD}N8D=_T7Na{ ze-hb_WbJ<@Y;3dN@InTVj0~q8??c`$NYFk!-5k8iy(|Q zKphw}>GBkWr0cxk2Ll6|o6#_%w&a+2dEo~J0}NOsO3!y(P{&Bh{H(Dc11KU|g$Bnh z#egzHKtO@9iF-|2QM60qe10OY<|k$d0m?9Z&qa`iARyMTqm!W^MnDNUk8BctmI!un zmn`36a{{%I-KDyyJe=tFNC)j~vhBuVRFjF78BD3w{j zGqmf_k(;-{H~&rgw~x3#8HiW0qiIADdfkBtNa&|t`SI3Q7;C=EiXw-lKM00dgFckRMNXMtD++cROFk3El`V3T9; zL}UFCiQt_X5y9XU7?mRdOl%~;;6XGQiGr;r*Dpob-c&FHa6#g=N=;LaQn$+Ydw02< z%;~9a!XsPf!-=oA66R$S-0iXR&Yk-Z{sznoB)$F}#99Yq9-*8T>%f16UmRI4)NUlt zAs?n?)R<}iS~->cuw60jLGvy3;~R?^9#iwfeI0%(F0Csts7GYJ>&#fu;g}n1e=GKy zY@HZjmaXTNiNRy`UT%mC6mkodk<#%=*rC>7IUo_$7*^-?Nmc1{%iXcvRHG=B9+koz z`TSFSiDw+Wqj@n$qGNYgJpWkYZT-=PhP93;56JVAwuvUkI@O`&a@_ksO2S)-%OHSKvdhVYbVL>$W>YfRgSlR_q&)H>L+t+KKWry`M818?JuG;_2hkH(^ib% zCfQS>la9P}A1azbZ;%3jwVwWj*S^bV>DJ8kMZFGSYk+Aiura)bMB>aq%Rpo)uUeyn z42or$M?>rufgD*~*x{rdk^W-4Tm|87u`npdjNn!csbXh@1N}D*F+@pU@gE~605XhB zYhFdvY4)BF1k@NP-hi6c1@uI|8a*PMSF_*SyysL(VQ0_iL}&Bf_fG|h5F!M$2B06{ z&ADsf4Vc9MAxF>!V6Z$r5@Ln8Aw@s2EGZB39_1Wz;v3(grx1{LfJ6hNMF`jm=wb}O z8X)k1-#{FK1nPZUp4QpLoj~|+8Zv{pIi0G=L;;!ky%J~$;-Sp~!TM+90*J<{_s|TW zE6cIwlh3zu?|FQVIJe$3v@YYUYnuO>Suy``ug;|7y|F?oKC6h+r0uWrOTp4)%@-u& z7kn@1d+~3)YxiSoar;t!$n%-*M1heIROQ^X(S?)bZv3dcn!Vz!yJ&{V7j2fVcvm64 zL`=Ti(E^F-GO5c^^(OLPFjai&pzRF-cOA8+ndMK z=F3V+8OwB7M8}y58qX^A3`Pi?43J0Trurov-d}!_g(b0CkkoV#Df~T#x-ttR?;dX} z=7;Fr29L_0TE3j?JI9A@A>yCNt2ZSn5mmqjMrYG2Ym6DJ&&qi|2oOk!-DCuowMSp0 z&Cv{iivtqAeFNxgb$7qLx3aUlCR+M>wj5-K7>>ta*3Yx+RxanK{zh@1ICQBZ#S& z`XFB1OI)UE;>Rf@BhkRnM9Lgro0DErMS(#Pz%Tg!4wbC%ugj3x0U~k-+8;tIVVVbQ zTFZQ+N=T}PrtTiq64oN{!e)Y|1rxRlST3xeRoj2*5Qg zg@eX{9i85B#5*4!1Oa%|F}j2n7`>qI{8|zkV5DShH^3_*cybWH2nf3V`gpON#E%U_ z%sUJiZu{KH+q}SVdk!E9D7$I64_dQ_++O4Vdk?*j>TrRko`T#zPQP``w3N0B3$M7* z^mu($Zp7FgQ+F0n&*~p+j}NgU@v+@gj2^p#mwkO%$h{%Kj^LiwdwtXBWQk+C(v`3W z8LyT60-8#_NKYgU_4XumVxOcX`QJO`DK0(rcoDb7bXxe05?Pad>9vP)=Pqks%|Yl1As|Za#j{jAW ze{{L-n4!~F*p7S0_rXg@UCEzL=hig%WFQ*?$_9*-$q}kC|1vp7ZI8d z7H_d-xFHq@CD+@Ei#peP?_rFxx}Xd3zbyuJu%IMtm7_x>08UtH00SQcH>gJ3AQpUz z^U{@vQYRiH8R(>jvW7z34CgM$yowV$SdLJ+g>IOJ*b-mq+O=*P*;-6;Vg`r?1QkH>q3|?DXT^r0D&+abf&az-d2O>9$06oD>tKk;+u=_N!l4GWI#P;&w(c&uiQY;4Rfnx@ zA?z*cS3xpuZ`Mh>54?xUEtge(RpcLCuG^ML>DhNFp8;LnGhP}@?JbL zs^y;%5c3Y$WB_0maM>UP>j2m*2a8AsA~x8|TiQiuqVkEgZFgoy3av6l_^H{h;i_8s z_)CBY8G50%j~H--JR*P!n?^!Gql`hk-h|+^)UkF?jX~_nH3-i0Ma0T0N&u~0MO^a1rvP9(1!*`?sPeIF()pk zRs?ne$tWHSBzAvDA@fT3-3?nsc1W{!+Q*IohQM`9;)+8dR_solH3$ESN8h1IdFgAR zcu%w$1DZ#x5X%62KVfVNkN+Hc5Lj3Qb653Fz4$7oBE}7#0!!`Sv&hTwb z-~oUJ*M*Xaus+5F>&HN;gL@U+gb%DtVCoDiyf_)QOmaGj*RbeGFN7Q_crIS!MR*q0 zaL6TSR9b5S^|WDo@QsmHV48xhr@-0>L<829)T7COK7A1S*c9Gf$t}zc7$=c#5&O3| z6awp!9-c1K*?w-gH2jQHwZfS?|F3~In*=_`WjY)w7d(%(l17PR?ykhqKv24o4VR-Y z`N>LtY&hj2HhiYp+&4P%$?tf%&Nxs}T=+xeGc-lT>sckXh?AtP(+*<3Mp6%NrM6+skF zJG@Rg&K)pOa=Dwch$>;?abe*#D(+#XW_FXyvu3rN1^y1ZNAWsCKKMz8f%b+N;m|p3 zb~b7uIyNV1)iFh2(SvsOutP_#bxxD$q#JpRL`2@rY^b=OI4aJP1ba@a$0-6OYFo2=2 zS?)n23{OHN=7m48a8xG8SCs+#IXwX|1~>r{fJ8L27`Qlw%|W@kOOSKL1;!UVgZ47b z(SsWR$PyvQQI7Q~=>%vj%v9a};8ibcX*V$lU+BGv3aC{x8 zDggzyAec6mL{cS13c}NpUcVEP@+RxHr#KW~=9H!}Za5=$SKe@EWKo@Bbfo9&#vgh& z#xA`leK6>+8#n3dvP^W*ZQ${|>@Fkz*!jx4OWrRIXv;0RRZxXPG@=K}qK{KHGIiTc zCv7#!DP=bFByYTau0eadGi3*PPMje0E;2nW!?>fH;BD?>WThps5V?3UT16;8S)ANo zw}aL4>!$(VJi$q8BU>42)=H|`GTf=()1Qd;S@-|L_D`5x?==1KH1G!>GcaTFHmp^N ziXC4808Up>)>LR%05t4_5FPG^ZNd|dsm(mAnT*&Q;rCt@nnM9HYzB;H(1CfLRUq9- zX-)cUSH&P%!|Yx=!M4;jLJgT8_$~>+B%2AY!|Ccaqn&iGNTmpPE`FC_-x1_6bc_vS z5f`J%w>1Q;Zt*De8zlRM1x+t1>4iwFg0F%RL^?xef}q`%9E?G7tN>ZeAT&&QA-x5l z^@!F0eo2H81J>X-R<&316wCvt-R+Lv(FYy`)iy}E%F<588@;al1|gq9V$eFk?r;a8 zQ2(kU-)ao6@@9#od8hLgHipgI3fDkU=`jA1q`gTxbcrIQBzewcX0g0hU0vshxU!(+ zBeJ&}rSLo)TW-7$6(^4Ol-feRpPp&DpsTxkl>_XPcfsk4<^Axbitt?Pfq^vV7~{Hx ze&aI|-4!&AxK`U$jWP%CqV4H=Qi|rb)rV})sw+i=-EVh|Yge&;K}hcn$~83BEq`U0 zvIT4OE=kw;uy^V}14Sc0qa93x^(EiSMCE5bJ5FKuu9MO_Zn`nV5o1pK2E{3n_0lp< z(Nc^vrEY|u_C7s-olU#v-E~vLPhTQ}+i?5F`wqGEO5^6_Hu)m;xN7qkO1%2QEOe%N zDzSAv7yC8#D=U4~TO9p(0*J7?C~_XY7bV|%$|=#_B!W#Bz2kDR!SM~DX0E7ONzo5> z9~aO1$97FktKr?wy-_vQYop;pm~}$5o!Km642$)hKR96#Bk`jVnu`~%x}_@lrG^$h zEJ`D*TDf)@Z6S1duP*yLCy#xDQhPS;|0JxR+b|&gm9hISTO)@?sYUbyl0Yej@ zhGi?jx8_i22+cO`wfXYyi|oj!+~tn}p5Iu{qzhpP5Gw~`CqUfw1e)V!&?i8MpYMPS z;07>*Q{=0wvV$1B(4eXbFdxu`T9Pw} z)LAWL6e}{alK9@^#KSA~(V4~w1u#u)L)G{hv^B2w=8-SU^j``P?-q88$9TocR)( zWYGPlT782UgxDgjCOAk$Dwb6k>k1J=IRrUe8DVeh*=Do9Ks4j2p}Lp$)N7K zXaKIDRG_2Nm7AXric~D0a-lc2D=MsJ=o9Bt*cSm3s1Fg@4P|O`3X*&`dhts07|D(% zMhnTylKt2T(K9tzLPnx`abd^M*TJKzD-aqf23MPdG_S!Nfv4Byx8t;5=BtkicMFdFYi`@?{-S-SXV*%%?H`XINUUa z4IA>^-QRR7XJL3RM@62g6R#0zJX>#ZGxlMd|LK`B801IdX<&PRg79Od9C3=lytc!< zed2q^l(Kb%Oqz$=6OD|nS@c*~geDaT`R(bXO5AOU(5ml9I(?;0Dc{l~QKP`kvLw4O zTZ5)DkaIk;o{21wR#Bg7=(?sT!Gj8?Ke3ks%eti?ANUL^eJ@7tUeZ4bO|*h2-tXuF z;3fz*-$N{=orR@$waD4Bo-qrb8H$RzllA7eH13XSs0zg|UAh_ZKIz>qkx^+z-HRa# zJq;48j*LcZ+oC<_!rj{n+p6{d$;V^{efr%nSS0P28zyb-K76RJ@ zEJ*+MK-b7&{AC5i5eu`H%JJC=MAZ{{PGxhfd*vKA8g$Qc=ar#y03ZXMTA>Pyfz)qPv)T3$#Xg`(o zZQ@oDPOKWcs^ta)tyMV1g-%ytZki zcX#CVhP>;KJ`00y<3KO|i+SeRyf*COAMm*Eqq8@%bvJax1Q1Ai!S^9n1~A5T9)MUbMCy$(GBXA-0TU3k zZrgmit~`P0Lw5++NdBwzOAu+qmf~SKwkY;4U<8zkp$hqqmN%HP`QMesQ&7uVH;VMa_aLP-11vqds~f(LjNu8BmLi?%4ZWTGE}LnFU@^o zkQ%MwQp)f2_H-LAIde$1;OERu_3=3Cd{kRB{;_3=UwUR8cRV3Dy0>mxc2;ED=wKn4 z<6M9*e%93@G_>2jOfI(N+PK`6k`57SWr|1U<42nKI=|$8mEprJR-@N9ZTH!>RaC1$ z^5PNx0xGiptM(%$XDRtPrSymtf;(B<%^&Mq`2N--cSF4dYPl=r>$W5xtG80V<+QFu zHd~jo4KrlwM$w%;hr(i=7CjFAH2%uvQ{3L@ScF`cR7~Rdxt@jmqKr&z`Wp%}>E-An zwxY7OeFkRZqPRGn#vgm99=VYGp4PJS*w9l%Zh%ctMX5k7{Fu6xxFrVF-tGf~4RREWyAe8QM&|&NbwCk)K(hMFCQL z4`?2O?%LfjK!kw!2zB`DsH!ZIQIvHK zXKgo#>8JwXXf)SfDA4xdK$$D8%6EfqKttSsqt1k~nu5l;tAs2+$4xSAnos3?Hy-0s z%GLvJ5ZAtHj&tl&8-x5B1f#!xitnta0wF>3eK*upLjHZ3vz@-&$E zY#Q1COF9g~)u?UrNT#_BeC2mGM)=bG5d>GA?kl+zYjp zF&JWoSeeC`8GAqkw*1($zIEItya95MJN)=RPQSP<)K1**39KiCrwCpUzZu@9=&_g8 zB1GHW08F;E9d?vYn|oQ4J)@#9^C^Cit>EdV@^Fm`vg4-QOfbh2?f3dv*RrsH-+8?c zs9&-&2AS0vUOc#J(|HQc9-@kAya)A3aLqu(*hYss(Ie(?wr5ZRarS%jqy{2NfVG~fvi?sm1gt_y1ll?+jq}b$bVzoCzkA7x>F&) z%Wqv&&;jmuPUJ=}c32z+c6LBa*;zAyyB`AH(+xsimcs)2YDOHgMI+CNk%6iL^%{eY zGAA4_pr3Nnxd*HnLE9$o7>XCmu`(WVAAh@qgy=Wdc+9%h0_Y*iHXugo-w-k;MtEUBK=n|FDTY-%m=xP{;(6xoPA^WG;aQ{=8L z27lnhP)I~hltHu7?5we+xuMZmSD@p{=Sx%6sKfr(_Ou!6p0K>~u*#-s8r3K-sNpMX zs9ZKv{GewaORtf#evm9V%E&U{QG~28LEK_v-dTLXPfc#*_kMecdme?){4oA(+=gl` zD;YK2$s3_S=<9WBI>uYCoNzMZe2d1%uI@n7RI;%i+tD_MW@YtIi>B80fZmqm>l+%2 z@_e(Lwk7!QG~~R-fB>?JLd>DM98}q?p-P1f>1Fd*j-PG=IR`LJPHV!u-FII_!|V^% zN`S7Dt2aVqvKxD45UWnyx@L5TKv*!=pHaO05->d)e;C=ya084BoCJQXKVZW(Bwp28 zDOh38#R1HVFBornq0As6BwEYRr%Bv2vW86G`Q(2em%s*P+b%>s%El<~(Ag7_<~L&# z?IT3^>_>UOplWMx9Umi{wI}3^?4r?F+;rGC=<)#4Z^Kpnfk5M~FWM)%gtB=0o3ir0 zK~K^iMGVnj`ZtF^V|_jhf|Iw80cYA8+)Ji%L&tPvX9L{cA%U_z2dHu~F^C8r2WB@g z-ax`|zu~T!6J&}^)1^DsU^IXrUM(CFMhS&<>YXm@f3F9>W_DOkkBbhA0$ zm=HFtvS~=Ux7sqpA_NnWHi}3X6xckBqd&R3j7!bGvC?}SWr;N|@N4E=@3IGw4N5Ti? zSVBHLlbW)J?75{N|4k!Tf#56#B&Xllo8`1g$s1fi6aPi}^-R6|Bdz`_R#UnZsT*F# z@0|GO__EBsin1~d%hYGaDJ|DaiWzFYBnsKF*|s=gBfA=LJqyjaTP9yVPQP8_0>6FM zpA1_3?R2dj5DQ&8g&CATGw`ON51_&0;OUV&_;x?MR(wYR;>k(9M0bsW41h{oo*i_U zj1psV-|2brgynsP^KEbqhmm!A0o{ZHZoml)@h`$IxI)wK(hnehpbwY=7*{sIQtw(~ zGz=-e{V|kzU6zH!5Zv?(re~N?_(JCfr+wVBW-zUEu1;k%xe+sB)Z^+x&!Jn7tme%H`b<9?WuQkfquK>HT`M7 zKm6Lgc~8232Z!rYhTbMxt$lGvcxuwteeX$rzGN~Y8`n+3Ul5Wq^TrcmCxdSpId8gI z{{_|dMN|Fsd1>mzH|VXuTDyueUh{Kf+|BGCW=^F(K-Ee6ij-EKD2mI_FTgu&weHOB zXr>rs%FsSI^G9`*%In#LaLmpiJS6hih6vmyQTQ?#j?ae z`FYLcQFksynsfsJOLjnHIAiZA3@q={oL}MHId-e32cNjz-}g<1eYMqcmhJ&6f8Xv= zrH4hsv=5*6aS3Y6p2&ESHA_ompXo^}aF`+0BIgGy3_T{DC$++gLbh2u*p=_{!;&at zS?bLTmQ;!}s(bPD>E-27KV|hvx02)3 zeX6Ss>P|heU#JESc2l2)R&K@cNxO3UNg1avACI-G9%xayCFRR^SeHxwc;7-uVT8kl z`g*)D2Wskql^G$i9O-c2Ra;nGSJoR8MjET`KC7~DwerHA>v64Hd-M(P?og+^Y|ObV zKZQ9-3mi|ZGk?tP2hV%Y*pDd6e)@W=1E={z9dEmh@042|HrT1c!o1Eab|w6tD6*ft zL`u3DJn86z8Bqv$=sTWh6Fz)5;i4J#7HU>14*NBVlz=x+!F0X2Qh=vqEEoK-S zEO$V2^j)m!$N`K1kmzGH5SO{l0Nyf14*hul`NNWGJQ310BWIlqgbVR0zh50!H-JR|9b?4`$PO1cp@b9D;daOG!AV)rBz@LL$qOj?zxJba-( zz^XMhr7g&jtr>b+X$P)ZBU+qw=Jn{6`;q;RD;wq0T)u2fUGf$2Js(n@`X_PFVwoH6Tq+1Bq`s+{G(*8z3hBz~UqyVHZ*lY#! zMp%0RMyenp%x5>B<&{2T&zki98p;4n%O6VSMCq9uV?5joJMc1cBzUeYYsMN25F8A; zUCj;`lU+4{z1N`-NXP4<<4(d( zB7&76JRv$I8_{ubucyGFb6-Etv!F@ub|$a+1?VILmKB&zv2%LwVL{jL5S_LUcV+e0y5 zCXJAiyC;il@MT;>?KAva8pZn1ZVC5Us$8sCI=O~gXPC{n#+CHaZ3{K4o<7)d9LS1L zGMLK;Ja6EzYq)r4kYprK%{c8Q>^ya4QCy-v+G#*1#gmuf;#qBXWiT=x#v#BO(|=@FqNAR8yC}NH;qH z``6Dwx%FXt(y)e=yB_32cu@bpNWa)S{s%UZ{=GF}3$S(VfjgW2QgpW(h#i2D@|RHr ziV2KPK=OuT{$S~we%32#Gh5!Zii;7{77y3aXCXOB6? zbk8LI=yL`IOCli3YfoP5b@&bZdFCdNVn6xbDh7{cOa^ZNre=8#oq*~u@8LQDLCQDa zTSVc-Qh;(S063sWAkh02?%VZ$dLB41$_3pn?|lkpRD&n!5ajkgDX;nw5azYCf!*?bz&A)~ zoF*xMXHszDh~pk203q;NI}gbNZx3D4g1Hw0+@>d3y5WW(#c;Ct?SkD&+qSFU43RQR zi=(pEs*KG)i2c~G7l0#3oV2x&BZ;*kQ=Aq?e@9(<{@*|RuhL6iMJR0xg={Lb`V34@3RmBaWO1=|NNby{fxdU6xPb}zK zXW_79TYb*`KR=U zMbR*CAP7zMnK2C%r>+2jg=g}%GX*kY-szGIHv;>nvx9aQGgqxE0{S0r8g!$RLCG!J ztQ>uM?GnOLM#=0&?|$xaIEDo7@?SYn!OJi*62*|Lpgkbo&^6Gy91816ZlAM8Y?PMz zi~3u{;D-TcQ!3*Pb~LyW#L+z`&kwHQ$I&aTbZ;wtIEe zKtQVRpeGO%8G{UE#Dmuwf*%yjTLrP*eSqdnX5nFG;!L&>{j%#U3p)O>F4I|w?S?Er zO0dU5oL`8Ho>FKKLy!Ks=K2MKVcSqBL`)W={|5X3xpuXd&CY&}9gSMM21n%YdiunU zd_V;MtMtDL`(la^-}(zNte?}s83uRVUtV-gI|cZ_c9b1vEr46lrRiiT820D@_{RrU zVlrF{Br)`MuE#rXqyp()j6P>z?KU_jX8`FO3$1q_nAFBc=CiQliHrp6pf7*Cc=JAB zX={alN7(lmawS8_KezLbF8){LDu!!N#_wJPMp2NM#lV394LT57)7Igi3g7^G0LI^c zcyL10%I&(y$a!tx%@Y^LamIVBY4!}d-%ST#aOiD7=c?Au^dmbHGxLvhra}DW?r%Ww z|7Kr)|CseYg?|D>1icD6kyWuQIh4o(F8_W?5EyLT&d9x8bo{Nv$f%bUTJG0F#gMoP zZA>~!?>InqKojf6_@5j5P4|7j`+vI|zkkKgmXoy`3~wRE&qOG>R>mh9KqgEWK>9Vl z?_+8nYClzcn8{l6%7t3D;?ywRq!VU9{exqEE)_i|ra_EnC)Voy=J zU-bQo71l^3Z$QvNtp!+dNJ4+l0cQ}w!I~FIWXK^h*)}hNT#)_=?SfwJ=fm&q1cv_s zT<4gBoMl>M<4C1)*>i>#ehT6R3${6`F-9dS&|>IWwnavn5gsj6pb_@OwR1+E#|fgJ z;QPAK4Dd;hW|F$VZ^iuHIiIqhfYNz0xjfnXvfxJGJFXxL zZX4X8XMsol=M*-gzbKY*=I2*3;P~ZD#pJ$!fT7bb*SgWf(x1QaA61p${<-b}1K!7e z&Rq_>tj}AGsG(T94;Fm?#g0B~yKHl<>#o(AFcfdqud4jrxA-TX%=_x^e*mcZAJpyt zBB;po{ELA4ci{TDOj?wAm}ihmYZwWce*Z&d(_4iQ$rve;O0oE3;cLl1WBEV6_#c&X zz#2&$b#)AZ0WJ629WAs0!O~2&)kDA$jdCdRh)y5dg(i2~IT{b(* ztUi(D=+xM~5&lWCK0f3wwOl24j?%d0*c08^?vjf>wa!6-AKvo{?fX39dtNxSb5xIV zkd{<&!71@sne$~8vr<1-i?G6CYA#rySuIDhW$V?Fx2vVXO1PamG z7(-*~)@*eTT=B)rw8T}eTX7zV!o}vvnbyw}oW;${t&4N?_IMmQj%`(0lB3;|UB-7& zl{NA#yURTz%?IWCqbg|Sm|LCF?pTVU(dTmGIn&cVNdnEUH(AxBE%nLxDY{!{C2D8I zI`V~6%2jE#_dI+trTErXo^~r5E|wsrkc9jApd>$U$Zx=;G4;aWl~M_u@og*Q@?Or(fj-Plmjzw#I@8t z8a-qKAI0_co}>vj7}+&8#>x419@9EdJIN7$B&8^}q@*~V6ek(gspNjOrY%!hJ1I4j zDS7mf@U4BT1+>`s5nqe8<ZNXd!X?IxOZhFM z%)Gl210I@%U$9la@?qYHd=c|lY2X%>>@It6=d=l5R-Lr+EeA?5>Qb+fRq6c(ZE3J=e(h1WlGK>E9W!AbWBZ~zwEmfcSJ>((f7II_ zqJ6A7RAzq+4BSmIRSUQ~FnVEm(K&vwd|U5$ek{7Des-!^ zb(8+xloC^Y3|=}cfM8BFEJo!t8P6V5R$d$xdF6Rs56tr1ckYKp!qgjO+{b>s{F79H z1MN?eDYB>BW>r3SuO>AmYAn5*_(g3n{92`c!YPt)qS{*vnJW?RwqJ;8qmvV`%+Qv$geC@xl(X-1Ab3!H4;RvvjcWQGweKgzS}5y<{b0QBgnZ)1}c< zCJ9F~s^db9)m2sq%|$64?w;7hrY2mB<$Ibdh3oJk%Hy{KAKvzmlS_19F{f`eiikDHZTFFu-A!=BXau%62?LpgD#~2^0_H(jZ z7Mcer1`A!3dcnT0=k4Ele4cySdTUvJ%CI|m+L9`pXhQOoPaF)W`d)SPaSd`q@c7pmi)&@zL%;;rn64ZrG{soiA>6lC!&?j{g>t)N)~j(lAqjpCccq(n?@< zK#fSMi@WSXocMr!L$D&Vy0}ubzh`5ky~SYCM)6!J_c;%DWIIJtI&mSgn_y%s`$l(o znARe4HsXtDYGoc(9Dlejyu&A$oY3NpHI4Tk{sz6!7*4?!r{JvmDEd~quCfbRvKfD5vZB%?fE%m9q$*-C*yF%rlIFPmZ?TgnrI&0qBlnqz+lNjk)fF({M}~? zY9ijH;)GuHWrxrTFGo=&-erx`5|-XZjkZ3x95)%2fA7?rH?uYgWW8uqoe7VJoT3{} zo2xMX3u=>z@WsMm+0CLm^af~W42N~1!p?ore&aE`GT@v7wiVpvcV0)HPj(_UJ1oqL zV646BKY3M0sc(wipC8jx&|ix)Y%nJo+dHMl1!QU;e(UWPp(?Y>J?Uylj7I+JnNp=$ zl*Y|q-j4%5YNMA2Dtd2>1tfPkALzw(q|S6^4L!)knqV)+pKGc`|5Hr!f7BuHPrbo^ zP@(@(o$Ej7JO8Oy`EQGM4UyG>g7;s@alZVg+W$XQh>j*aL*Z@uUcX;c=lgf8N5k#C zSJamI$@XbOxYOf1k};8cMHhyLSgPE5_T^^4|H2HpE}tsM;6EAc%|-^(iopLRumRh3 zFiQ#i|5fy_9{8&V{_27MP7hS8hD33}q-1e)i1|9xiEE+6H=T#~yi?35b((Nuvi$kl z`7%Y_mb~N_&`C8}EUY6?vA(k7YC4_*VYfI}8~yvL18I5GjT-N9)+A(3L)z@E3Kpx~Ts>d(ZE(7T``TuI3=jS7=Mh_xFDpB|8#Ei)$0xylB#^72j>@NTRL6_YQRUXDn{v{dzDKzsQqBS zOZ{)q>tsJXX~$U~{TS;PVZ+nCubRwKvJ=xpj;xffemr--*ypVZ-opfsi>#!Qb7e-| z&iZg<>XoC^>j++FjI|sU?E5Bl-(MdW{}OXfGrozBoo{Hm*(}AvRyRlMq`fh@zis;` zsm5(vGQ2JeW8w6nU{0g^%B!Nlkci%iLETCSbE==Q7H^)Gv|r1Ekp1^2oH#Fjv> zSS}%x>WG^uLRS3-8BNBRgoG1u!{vfMZQqd`mEuHk!%WPWKPd2Z)1lNFA1>|o!x_$j z?SYJa=d}8T?p8JQIT#;DnQ9nvo`HPGmE z*5Hqs!SIQqI-YL{vp)kCD6&1$`H0}!P_E%#ke`qe+~F1!6=-u{yfrMbypC4x8spY) z8G~3(zQ6F!aISiFWl1>y@YVND0lrdMU8w{37u`{Y1?7g$r&seoc*<_}S`??giE#_X z?Da!RjPpgD?B1_R8oV=;@yseZp*PGBdF&Wru%q(p#;2Y6F_@Kr_kM|}!W3&nPjno< z*7vJS;lP{0<3IAQWaG0ne5YCt7k6b$*Q093B@2sL5Zh6VHZ5_$A^+9nWy9vGt!=XV-pC3;;Y1E|Z?vgrFo!3n+#O3!k z^gr_7_wH%#4_|XD!gKPYvl^@xkd~2`pHr^iI_xprR5|CEo`1e;q~O(o5mJt29!rmV z?$$>^Q>!5dJiQw+9gj+1*2Ne&8P{RmF62ZzydL)qoE9}%4EL~N!ZQF*PvDmckWCV)AFSqas8m1$9+PZw33CE#x?b3T`R)=)b#30~rja$Gcg+{E^NF)!$X;DkluG19)q_Vk<3F0~_DxYdk|zsju(QxNHJu{yLgUGi z)P4H~s`I6L^$_xhFDFR)gv#m&Jv{UE?e=~7mi*(3-=Nr3!8_;Af4y7yFdM^%9B6dN zO6_x(8dgnETJ~C*>u*0*(qUcLjeV4DvS4=E)pXcZ5)o^MuUGp#ujQ_oocW?6+lSzc zDa*zS@rEZTCq2{Q!7s_w>23YAi9B|GIVVNKZniswCg>5+4EA-iTZk#~Xfeo;b7;Df zKslWuf4NUmra>xN_l5wwcB;}si{-T(_`OE-c32#hn&|!*oCE$Sg?jjYylWJ0fLjr)Xj57;si~@p!n)G|4r# z=aB|BE_;42Iaghrb_c^IbNoz;(!z6OQE!rUWJh7#zPZy~35f>1mL+)K9|VuYx1{tt zdd=lbz3`HFnRY%$8 zMhtAvS@)QC7d=YInQhNLwV+`Ut$eqEQZnm!dD5A2+^Q_s(Vav3RRh5ym@IJIyaD&j z%~|kFv+8g`OxdEZAH|uxRMT$VH9go}WPbI@ffs$`lG)ww-j&U~t>Yg}bV;wQcsVVp zXQPy!WtAS6w7Xy&NxAnhA@WTB`)97a<8Sc}Rydd0tb9qGa$9V)qolFK!-W;FeoVw8 zSyhw8YDyPJz#>T<*}x_#;}_YyRMES#UAck8mo|%+>XJG6-s3F3HGQyAG=0mfqB<$f z-oeZ6BvQxN@|n&Q&G^u*N)$a|Gs-g`CYqp-A8`*@&7+P$tvnQWQb z+pRo%FgV(%bm+i}r>0Wum0Sx0%M_=hl=xSMCf?B(boJO&Wwc*;-c@hjBCBIxF{5N~8lP0;dDDNfW6d0MLcCZAJwF5|Upd$zgSc*S1tNh4~!^xV00@!~&& z^M6xUeJRwVdia2GqxrCfyOCOdIKyb`xG~MyP>`BdET|T z=C9k3LwN-xqm7vA7!4bql3rDfJ?RNnHprZroVke!b>H*lIFt4q_qlySNon^i!WuJT z5#+7ql*A8HhlXkoc%EJ{%yx^>8mJ(U*ENJ4$(ntbHm2`@F zwIy8kO~uA0ysI2eZ;>Lc_H1@m$Gadp-c{P4Q>pis$T#Tb3s0BH#W$fw zHG4)AqK0K15>hjIk*}vaeInD_u^vK?KB#^uKHsu!Qs)iXBt}Z;W(W@WcB!<*Oj)ar zj!QfnW@X)^L%FjB8l>#o@s)aQRD*$RDf5KP23KrXKeB%FijvQi=2>iObf&(NtI}5| zrns}`=E45yjt$7n9t(`Jv$Zl}n4J*S?G}&H^0;_B;K%zNgz{_wY+=^JffY56nwoxE zlmLDP8x>Yqg7r2J>N=w0uyx;?Y1$Xg(bgqYFJ?O*M~2PU1r2WsN`E5uOb&JAY~21I zEi=!HQgT0)&FVJdq8+oMcS$7eEOI{m=GDOh=89+5=0$$l^+zMUBjb-qea@f92k3Q~ zQEg4IRP6s--W=1+Q@$tDwK>!O=pVSgAY+x3+@*Qv)2^C4l}WBMfAX|-&f>){5A9uB zHB~Wgt;Z_U5LMYs-{o^t&+5%9;`dv7Rm(&{i- q_^{H9lc)A9ZrQwf()n(ODhDPFj0^}7fb959OTZyL#Dy9E-vj{Bm4(y* literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-08/heaven-heart-dark-1080.png b/docs/migration/evidence/slice-08/heaven-heart-dark-1080.png new file mode 100644 index 0000000000000000000000000000000000000000..5057971e38739b369f1e6275fa8d00378241ff39 GIT binary patch literal 73004 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
    x;U~@Svqrh~Hd=0azhdygqLaoPiP6Fut@JUeY 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-migrated-heaven-trend-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-migrated-heaven-trend-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..45fdc51cfcca2847d9a0d498504b829d9c0fcf0b GIT binary patch literal 72587 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-migrated-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-migrated-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..438b6ac72259b578e702f1e4216afd0460ffe5ee GIT binary patch literal 129058 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%0DF%A*po5l518k45&g5*%OlD2w=} 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 z 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 QC^P@3gXPAAsF#?EnA( literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-auction-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-original-auction-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..c1b7eadb59d513ffc5d642abe3a501486bf5f31c GIT binary patch literal 142536 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≦%|3&RmwZSh#Chq|{W? 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 AbN~PV literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-heaven-fortune-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-original-heaven-fortune-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..af8b182d36e1c10043a257e77e07513360e54e6f GIT binary patch literal 99067 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 gq1X%wce7 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 J)81bP{y!Z_`hfrd literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-heaven-heart-intro-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-original-heaven-heart-intro-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..16a753d5e8a143fc14c9485708de9ceec4791874 GIT binary patch literal 79183 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 NQt{u=Yj%F_{C_F^hNb`j literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-heaven-trend-390x844.png b/docs/migration/evidence/slice-10/frontend-original-heaven-trend-390x844.png new file mode 100644 index 0000000000000000000000000000000000000000..c2df7bcc996fa223b248bcb5c6c5125db64067d1 GIT binary patch literal 31351 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-heaven-trend-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-original-heaven-trend-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..769014e31aab9ab12f8e77eba13393b1640bc1cd GIT binary patch literal 72460 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-original-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..d79a397871644e939ceb4f8ce9b69ebf7f360a21 GIT binary patch literal 129054 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 l?d%#;slT`k@Kbx+C-4M;?VJi_@% literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-original-screener-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-original-screener-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..738fcd11df9bf18aa84a847faa926edbc9c1ac85 GIT binary patch literal 92826 zcmeFZ2UL?w*C>p=qkt4Ca->RVQbLn*JP<<1Ktkv!ozNsysmF#8OpsteLOX_*LO@D@ zfPhNxQUZjkH0iwx!o~Of-uHXI```b+>;7wffBl}Um6<&=duGp`J+o(K@8>xhJo?IV z%|KUQm*vC>7M2soKbE6m7HyWZr_Y={bNcMrGiT48JA3}(wTl-oT)23h_3Gto+}C+{ zxUX|@@d}6v^70Aub8-D9^_#GmxCB7rhM@Ev>DzZiZ%f?%Rmq8S=gwU`f05(jMULCN zT)emcm!G4LENtgbtDH?dbwY^cB-@EoY$uNDS@@5MJbCKGFM9v+oH~8-%-Iv?&L8Jm zU1K?M>g1_o@ZzcC4xBr4f#t->Q>WR^uydTfC1;j!UFaUf9Q*K`{2z`^e#j^9iZ~Uz zxrG&>FfNhAPySEe6!)wuY3l?KKChhzD(jZ?eiIe52z18P9aqhF+~(h(f3*9zs*hQ8 zoOze+n5thbojc~+$y2{doM1b7iv9F0xii=AK{(7F`n~I3FX zg5n>@&qqTnmrordvz=mN(PH^&#=>$%NrT2C!$S3ujj1!*5$%o(RvUY4jVe?4{lkHP?;qA5#eVUs0s^3Z{Ql^=odajkLb)c{KqL=F#+=6S?&~7(; z1t}z8=4+UDDkB$@`=&ov;pT2`Q5XN-q!J6O_dh%HZ;{iF!UqnOBd4DKJ^ZTo-xv7L zghRdyn=M0iHeeb;Xtovq(P{{c{gCU_Xh^k1*lW**`I3?6Nn9s2{+|e*;%aW9zTKur zUh)^dAq*~SYx)!(&$ItA-a+!o+gr}YVUQkz20ZfcyvsZ8>@LKK--N%!^|;Y4!$=(X z{1FBeZn%Ty6o&rP`!`%}ppXSU6;F<#u8y7l_}K-jn`O~DO*@EJ z6k2ms4IfFqFLFARE!1fHufLIgOv~&q{AYio@8s{`zjf@&`D(GS`xj1Jex-*mM9WW) z5z{!Y=#EU9GM5tT{Z#OnBrYM{xVpP(Xhh-XW$n<=$B6GdPW`SaZMU0lw1)G2iBzs% zQyVd(Zdty7GB~Pz3c_$vBI~A4;0p9)(vMeBFJ|cT8#|FJI1TDep71EQrQaf@+m~JD z74D{lChs}?9N#^h+b;j1sa3N5T8nEYSbpn9dV4i^y>`EL?PnLQwtMYoX6cjN^5g1= zzwoqhM=Ya9Eb+?`)Wi7r#h=+%8|cRfx^Dimkb}a*m4hh%CEv}zH*}A=^jCdZWR2Pf zC9+-y1LUtD1I|lKY`EHQX&2_XiZHr|wkRf~pGGUla+YzvqAYjaHiN))Ttz1}38))3pa87wruGV*9Q z90zfFq{SMU?g$l&D~NTQDfZJcyRR>xE2u{^Z;-Z!M#C_@LVB^)oXv4RGCwTYE5M(k zRl14sh0it)#G-lk^E3SWnu=M_NcHQoyGiU6FzuM-TIqFd2k6Ep@Bfnv5>|& zqr_A>mThb{v;?p1Tl^?fEmhGy-7g~-YX*@V`YtDq%ZC&EXuE4BxpB@lkf1R4)%gpP z_3m?I3Rim;HYW}Mpj-DrK@(Nw;U`v2dft_lh=;iy$FB~K3c<3~!F~jl0;j?Cr5V6qI<&DjjS7rMm%@zfsLI(#K9CMRCFmg~FkGSC3fSQI}a? zdfxdluP>B%J$>0b;0hEA>Kq(qC#!N&5yJ4GrR7RL*quEdLeCyF+mlbx%)F<4ju5D( zOT_5tlBW?iPlt|J5`r46ZAUd*%ExcN)ol=FItW0wtOee^|HNLo)R8p5e8p(EpvGgy zo@reAc^h94YJJuMWPaKRuQ%_Jc`?f_4B)C$>0|f(vnFKrUF4XzZD7cZq`ny%gU2c| zh|Uz*9STQrULdAAA+{D-u+Ode$3%9$(jmMF7S~gjlt9giHi+eKP0}s!>|fUT;9lUJ zTGJLKHtSi9ae139|E5Rah9mHjU>12;)1 zQuBNh{k7)pX>=zjQLTA+^c8|EW$yFLE#Nr!P@+4#ulHaf@YXpd#K{Y zEnP&gwuYJ%TVp+3hg=8^v!4z+V&SLs)i*-7=ccnTkA29QVct*r)Cw<02Y2Mp-DP5d zj#k0Pi@VTJ|JVm(pOOB7ZxzA|cjhKz9sMD*vm25Lwy~A_iSgJ}FR>&80MA?wPPDhm za>1tRYbMs`AZBe*M&0dFQuJd%exxMKw#`mz%0aM#uG7iE#;7w@mm7GM_rv#V&yrJ- zC4$6pxgqr)#Ve=l?BIWg1_fDzj6*M9^I}=ZrnDEM0koat*!jd8H;RCCG)Iv zvMW92DKO3v*$Im0(0=FRhv_34yw*c}O7mc~j6i`XSpX^1SE#1T$`NHe5Ac2psW6 z&*?(YE{wWYU4|NlJ#$-I8}oUw-ECGJR%Zf1dujtci2(2m^{ z$(*O$`FS#CFRL zB_ahw{JQHb6h0KtOPaF7EuD+y3k;0Ns1gus2|jt;mFe4UB9{t@X?yYTQL(-VIX@|2 zAnyeR=ZM)~2TX%y76_~Bck^{K5cu#nTgV&on^LXEBxWBM%tj}@yp1P$4pWREx_2!Z+ zK7M2m?S?|hbWqlktL%${H11er7JEHuyX7I3M9Hla!K;vvy^XUu$RbYb!o6m4xsG&K zF+@MQE?T~(KwU0hSKnl$c5DaNN}e`qCR1u!U$nMgEpvR&fWe_Hrk6W1)J*2(3U!L5 zyJf0&m=*(O-Ys3-o?WW7S8v)YPxj8IV#`E|#RTua&yEuVmEj3mFS~0N_8k12sjhIoxa95<32?iCnuj(v$hM7g!%VnrZ*vlQFKR*a_$m@?EzE-KfhCLLVj zskv)@`OTLmh#3Zh6JdDiH4wvaY;3$!tA^BkuZ6Nu1UVhC zDh91&N>5G%T0YBhIb%plu)FJsY>Y{+$}jtA?0VwQhG?2-if~ei0z*^>+BzWHVMu1G zh);RXIJR7VN@$b?UH4IAzYpa!vU)Psy@@pvbf<2TQg{3c3jEl~s z6wU++9*ya&f`w4aea4dMd5ub0T+c2sQJW3y7k|u{xxK@r6z1UUr}Q~{$pEEhil>H( zkd;r64Y&l|u;A`Fw?KZhsEaNJbLyNQkkOY;Cl3e_#wCM?=DZt8`)AIrlKF4)n^p3& zrX&E}Z4%6EF<>DIgWfYA8wOw(<4q0n_;^}JN5|wsMI$t{elr$QEC~nDWnyZ$b(%t-WxL|iNQ~NO4#dv`{bU3p$BFhA5-zo)anvC3=R+q z*-bPo_LNreNVlAN^2NPvbOqo5O#H;Y5T$h~*(Q1-{e^^soe4FRthf0rR2eC3i7GQ5 z3!d=A0yoVap>Ipv0dhbRnhNUEQ?Rp`Mw$qVV;;BIZ8^W zXRwg`Y#I#084R#*4YbrfCw7_o@+#4jXj_hz7)}{cCf|*>!4u02LPloF29xGyy#JjmZ{t&P+eRwMyKeqW2&PIJOEe&8MjT? zJf9gp_^Yq~{#SpCo=NY|R;T!&WPM}uuKy$bgj!W}yPBt!ar54;az)bUsSy9oaEt~0~eW7-$!#CSvwJ~eeB#=9tu zmt5t9Sbb?xNhmLvebWl}AK-X2Isfzy-vZLEH9_vWWk>7w zd?up4>urIMWHK2j8@T^^|FW^aqm%tsST`HzF?LOmW)!%X5A;Gh^ucZ!PvZa$Ur5Rh zn?_{2w*i|s4Mmd%j0f&|@x~4Yae%=h>rl<}seHK!VO>x|$>bIGKfbcG{`rs1?f-K4 zYd0MEZ`U`+;a5HXRY#giQjam{_k0xQNk1h#c06G|^=;p(FRH4ku6_1Opb49)lC)_o z(BX=$9u?kL*5@Yqp|}3M(r+hO!P9~_8n%N^QW{p7kBD>bq;W+m)oEnTHmS9dVw>Vy zE$ikB9YMaWZS|4397rp*3{($LG1lPJy>;dfRo7tmVhRtDh_;}?LkXk7R;+Q}+lCxN zSKfV=oLjif70=oseB1LuctWMiUNHc;R7sQd+`}(MP0drd>*cts*q`#MyS!;Z)i>Lv zEWhv#Nl&fB80KyUO+xIYItrG~_D-tEFdiuOL|rD;t)a%+I2DaTVe;xI3V?3sqDvO4 zs!ReIABuWo_wKp&c=6c1w=AyOqSpR8XJhi-#z3kGuzmg#4VSJ=8->Mg&Ah!&Y{(d^y z%yY+npJ_ePMN8lewzH^9=;&EG?9Odjj1))b^DY?FTY$n`!_r@tej+)@mW|w~!h;1BK~nF}e7x2Y$Tye4bq4*69_?UqJlq(1ugk+gVN!G(yfUDiy!KTLF?9 z4qo>_Po#p2-|UvjaVnaS{WDMA<9myV-gd%qc8*Q0_zPl%Ka=!{EPH1&xyA=$7LwRthr2)&%ZbX)BUaZ z>n82Z^$?xzVsSvPYVYS5A|-nYDdb~30D6xq`E;|-JL%SQ@5t6~Y~S?WRD4*tj8o9K zOHQERs0iuh)bfIrCnIT?9UY^d9j`@079}xly_-)sK=AtRua*_kzirR!e3k&M| zc80AL0}6dB^+j7MCEI`6kdWnFwFUTQI>c*>%ushFV-cZAbmE|u7r75cud2W8l0nYM z#Rs6=6FQ7K+EHEKFrMt9Omgzi48Sr&c%up|!13XFZwMNG=gI15&1#WBbE98%;ZlS2uT!46T{QCc0o zlfKI@wVphHRcIDD zOYLc1HCmxQiYA01#T;wymS|XgYyu7_NAD_smeI)?JnH24=QqfMU4IY9upA`4$51kX ztw*CRSk=2Kl;m*tfq`(|l819JNXQ^svBWn0QBou>@rpyqwX(zcw} zgz+sBc>yLm_7VZ+_q2<#j@O_dj6Mp?6;6%YEiF;9AdD>=_wS?sxNCMhs&4CNUjkYe zNcBB!c#B`_+mFL}7pr>*F-I&HBb#`4j<5eF{3kgW+ZP{;`h7_Dd zbKF!?C5icu!h+8rOTdd0@(pMC`$&|ecTP!Q)vjv%Fu;m$6ybnekrE1*ha1DD>07AN(O=Zn2m$lo^MUYW=a*gdQD(uuK41BO~;uQ%rtNGWstUa%_UFjD$McjVdc=RQ-oITN`XU1AxO zo3HMFicoQ?W+)$g2dtUvz4TqXn5KLhgHXeC?m(OPvdhnsS5_ScCq1@PuO(&Ve3`%` zDQ6|*`*Rk9aj5c2S`{ut;IQ`r3Dcu(DAIOa8dprWPM>c3bnUy{`z}n9Yj3~qj})&C z{YjYKqz<$MLQZ9HqegT-DfLc;%kvNsCq<*3#=nmzN}>f$7wN) z$$GHH`|1yLSH7+OmKsE=kmBX-Y|-2 zxJH~W$|`ANMWXkiW$*($)q1KIw`2j-L;+)lBcHn7jHy$ZD=m1)=Xk^tu60;)74CM#vg8r99pBGik$IrHpSKzLP|c{XLg_}d z#v4Tj1J*6I5}^%S^7N<2^4Wa;$$;4_+l25l=^y<<<~(m_H3&yo@SR3Yq4p;$36zwz zkvN}Awe5%Tg|FIe{R^*Znznni>*N;H%}Tx_l0VzeilG#fLND;tj#@zqTBnb9amH;m zZ4;iWygG$VcYc87>|4k@O*F0n1YN;*zragwBuJG~boJ|(ZELmc<}K(4Y`J{pvcsi< zEuB%iIx6gLOw$X;qW&6XjWxL+Ru)WW3o@{6CWi9ydwe!pVxz!5LOqHr&u4eHCgEo1 zxAzFD=oQ|^0vk;uv9bW2UCA_}f5q7oV4#dR#1yCzXrJ|0w6a-yQGML8=?m&9P}@TJ zNWaPa8i)QeVg6;pm;6*^XpRqtL(P;8v^Ztf73C{QsgX0UWmD2!sMbmDra3syvhkVl zpVBhIUdyB3rgwiLLy>I;6O^WonmFgxA71`$e8iIC$HQmr)Vpic+p7J6g*r%DNC?v; zPLP=oP?uXcV0&LHJnfaQOA~HI5eKYVtCpf9`HgH0qkA1KMU6$Tm?^MY*(Y>p2EyqO zYx)QC;8PE+)?`Frx_A%7FWnhi-$)ud*9y`OM9_FW6iWX#s)^bN%@@{cjGm z574=TmKTuA8!*Kx{Zh!}b#vVWHB~|TA4z#n!3jM5KWEX}p}guwp39xvMi>b4M)My$uJZM=Wus<62p@E>ZUO zGrQA4GvUaaEe9Ml5k!juRm!h=K{i;w0KBX#8#D=>dvjDPYc>bHq~fWpTv9;qZQU8)*0H;hII4A{t2(_e|QZmaq1~8@G*@W0v`L)5BBM=JD#cJP|WV z<*cz3J}elBNj0`C48(ClAe|t?RhYyB8wI=Q$*cJh#*)Lr-Cdq$HUyWp$`$B5%J6B< z0L$f47M6o|G!+@)qJ2}bkg@t`Z|ld5a;Kgh(E9$Dq^xOf57#i;5vwo4a3$-YG9~f> zL?x4y_mnp}%MGP!opBYRs%3Wd+Z(|tkEpNZKLm4|$~QL}H8fwjya`#~(}ZpZS+@UB zpBH>n6duJjMDqAXZi6XsLSj#!#~=$cpyPX)S&@dTs@q{s?z0pQX#+}5LK=Cx8iV2G z)w7R}PC7r9sh>cQc(4}q(i6;?!>bnJ-Kbj4uY68TweztHGAHhS)V04zPt{^cVt61L z;KAUN3SL9(;j7V1>xj3x`A&fO1+u5u0FgwA^bie9U_WBP3JILo1XdTAB7&}-9rA)- z&TqIOoO54k7qy*NnzHYgf~PzvL0ywf}? z?2JD@4_i!?eO6-U?cEf4rse(~HLB$%pA8BMZ$mr9LV(%;+ZhJHT30BGKa-2VRDYf5 zcBsEPa*2yjnAK2(!zL;?InBdtaGmWlX_$M^eIekzW=PLh60`J;} zEa>ll|DQ`!w@PSn@3x)ZeWc*TR+OcZlkY^?MuzDYGFz5THBu&x3J`RTr=>ga#i?0f zWT&Y+V_#L{uj81>%k(*Zh6TkkE=-oweAJ;Nap-UPH(MDZ0%*25Yx;+y#VqJ?R$WA%@;$+q_U$^mf>hD|SoAO2KT{vaiLo!=3`nq8?JgZHNBJL_F zRs^kOkIbo6vXpqAJ8vhVDj}4W>p8m;P4N)ENbB%DVOE0f-ls8P;Zi~Tbo#j2gvCDsx zx_`)sY1$_K-^A%}a`o@>@k_$~PbK~SH@QD0t?U0=pPT#*7P;g9E4u!-UY`>9Pfxn_ zLT$7F`YnB&F2OGdJYqqQSFry>)Be9PJelJv3Ie47$d2d^qgF<6=y)(ko47dq) zX{hmg5Lg(;(b;_4_KfmGfEUr3HJv26grkH}cX|3IN}&war;mqPtYgTixXOtaUtx#0 z44GUMtIG3bU0)w-$C|-aZ4Bi#np3DQAllNzZJYm|MZ(W!YS*fEME)&2`MZn^OSiYE zows~Zskx+`upkbdr_VK;T+L{X?KWO&Wd!&^>4iwLUO%1cAl2d`#p-sxQBL*!8~nRY zY~VX@Z6`h6hQOiJZYD#e5OvESB8U3qPI;eNh;W1?0Kn5ss|obsM1vIyZigSZQmHD$LBJN%Y`AX~hfm z_s2OTKz5Xy&tuN!1uOR`$1{muw zl;xOnJA1^ESo!!)ZntIu&@(3hYkkf|$KRTvD;7pz5|fd&O~J{Jk;WlXEVj0&b3P!b zVc~1~WH}8<7TUedFY5XQ-lG}@W=msX`GDt@{MnFBP6 z=)d*BO>ZWOhSEt%oy9qc@&|?`Uaif|mO~ZY3A%$lt9EuSASB)27Y0435$%7lPugU=7$(-0n9y{j6$W*B09#BvILKC9UB18v>-49Htrn}CqC02+0gxcscR;fXrJI$;-OSZ7y}X|sm9*jZ>|1`_+}nX_F``b%OfjJ<;sEBAc`0LJH+b!Ks-QO| z2Vp0`9OdW!x^~WyC z)8CfDt6cp)*sxK(HDtuCu5a`e1WA$ZCcYS>_KXaRjGh?95FF)o+#aFVvIIk@hVy{?|pjJN{yXo=s*! z%zHe*C_WMC3rjR`)9{KJkS=rv*)@=*aj1*XTzs(=X+sUJAZ$$$8tbg|9StK$@BD0b zIK2M7QUZXuq267Wld`r9x1U{bICL%Gz++k*dnQUvI=wxkB(2WLN+jh_p71xC8clhw)1_v163p6m*hA@_PDz$VPK@S>im_Wa*`7>X zssHW*(|!ojn?U^XepYqH_9G4y#5UKI1tnmxJ{2jTN?<@A24hn#6ffVJV$o3po*s9p z{%}ctG2+sk$1Ijif9ovmX%UMhfJBpaf`gT|Y^Z6;Qr^5zu2noDn#F{0TopoDxe&%^>k0riVQW(D)suENl4LN1%@JoEw1jn zkoc3GtY;r1O^2hUO15{vHii7}J1$BOz5;nC%NKZcAPKos-<%C^joI?E9-DMHc&m@K z(#k#b{EtHBCR;dsp+0fPUGPqAN1>cr}#Ic zRoUV43vO!tFhiMzHS?i^v#QfhbGhDXK;nRy5wn|XF0gu_?%lDolGms+&WEI*2`xm( zdCO!#L7*~QRN3yR!LYZ~W}g5dl>?83BFfG`bh4eBcEFF$l1Zy3IR{tI8{HD~1lUO- z>CQ-v7*xDH0F@zl^{PC-o7+T#94}&d+)f{2(xlsv=g;1}EIEc)*-Z>5}uaxEXZit6O zAf|VNFKv*4uaH%NHCTYSc2`D5_GB6u4Ob2aDo#p?h0E+|`o16Rl#HEFRNUOf*;vo@ zTYa+%`-4W@uhQDlcdgt8byUe)?%!&9z{fQrEAq3*#&+m=s@ZiL=hps8U^|(N(H(`s zk8Oqm=(bOD^B&)<)6HM?_4ajc{y3i8TOXbXn2!pm$2$V5dC4)c5l1Y3qRsP8j6AHO zgv+0MM{i>V=tB!Ib@D_M%;m5L-cvzfuEK6V@rVO#W?G!>ldAfcCTy>;7&X;tgk9Q0RJ?a;AUzJgyjE#eQk$G_46UuW$P9w!* zb>2fNu?uM3OR-4ru&^qCEz@i%8{rpsl_X-I6C2sM*P7{&9w3oXtXrfrh4cZ@#wTZL zbiX~)>n_d55M1TYwMef7)0aU;%$o0a13#EIQ|^@%z9XXu7muB3d0T99Q|$YJW=gsH zS!M?^(3z{37x^Kk*D*H_iZ7q}3&MXhXPf`m(G zDUbmZrOLrRnXXEM`g*Z~&^+ot8n?(<8g3Tr(5VjkUqVX!E6cDi!MmQ0R~sIL{@rNS(< zF!$SH;IN)v5ko$|+w8nalmvenBdTrkSMs>VyxpfDA*q`Lf`NK4Z%>B43-(+Kdr=p5 zFO8fq1FIb6gnznfRgAkXlR;r^SP*MK*j*B%Qjd*0PcSv9*8RffsJxCfSan;o$DR2D z*JnO}iJ^=67CeAlqAf7~i?woNUljyKA~JNw$DqJ4&N3RLj{$QUe6vC@I0tLR-7gc- zXE!3g+1Bae%_$!pW++g@Z zsf+9>b3|v#rZ+bMtI-vMj;;j`Ovte3fTy}{G^}}Pdoa-^qk4#xcPE8m z5`!~#H>yyp)dxN=E6&)9q((usS>-fkUxJOk!=)06ZWwAhH#bT`lqvppfV9*N}K`%oXZ27ZwmLyou&BW1@>nJ06^y0#H0k1VobZwUz9V^rzc zz$x1RkJyQ5B#`)XbbBYz8KCe*OD8XkeLEdHCj?}l?-Es}@t|#ag02jabG;I4ba1P` z7b2Mj(Btwx`lSSji|!* zV;AzVk*Ir*{5{BPp=DoFwM9jp=jW}1TCOL4N?1Z>;er9;Sl`=S@s3n)^L-01e5a%C z;1IfbkQ%v8$a@?NghfsFbo@!x0j@DD)FKBPc}#_X)Kb{Hgdz>$1Z&~|*#WRC{lPTR5Iy;3Yxe~!H^w;T z;Rdw(z5;uOSd^c+2$`A6OJgf&ZL{7f!Lh+i$phv&E}S5R9IOalS+`hcvCz9`0I@64 z{3Sf2+w8&k=kz$ot?O*Xig_q~A(Qsmk$C3>iZCK8!8$Im7QKSJCoS?e$MX*LU2c6D zz5xAJ+JA16g1Oxvn$`^#F}9&WY*Aa@_~EMHQ#LXKlU@N{P08$8@fZHeCN_xFO~!I! zTLO_Sq{s;&(V=>H_;jU^fH%Bl`tqF4wqr#pX8?npL4_i9i;Wf0y7}=Pyyf!1GD9IN zPRIpH8SB&PZnctY4Wh{UW&qCBF=$4vbtbzRZODX0`q;I(jMzLU-J_*inarDfD%qt1 zCVcawQ7%qHJH2km8JO?0`~e|{`tP28QpRs@_LN2ZRX>q>f*h!>@W&uz3$aae^jvNL z*>>rU5?^)~E%GMveIC_@r6M=QW11Eaw zQ7YI#l#sJ#!WeJfJTi_oF9W=_fI-97U3`Os17X#s)IKovbOJ(CeaYgxBeSCx6>ehl z^F`hCQ<~&L5$})6Y)5Gq9V#PUXf#Eh#yc!?#FARuI3af7*~5i}+)TmG6vPxI@iMs^ zMYbrvJ2)eps02MeTNP~Ts8&b@kxMQO8}Rb(QRJ)vGv+-l973@jh$4(Fad|#`dapGv ztYlYO^PHjLeM9y2EU1wES4-B75mSKM!j|P9MKhY1AVk?PA*tbbWFw$Q=vRC5XX& zK~R_jU)*z&<)C$I%PC#*o>)vrHXm3E^_z_UPNyzSCp@>}yfV#&}sdNcx7U`uo*#>X?e?Xg21t)tRW& zhZuzfVj`R31T-vD$}%t1Be>m3za^FPVMVjNIx*HZLM`~=BbF+Ym8O^Vsq6&>u7WYp z`X7~#erZ-O;veB!=`OO*p1IZNe3x8WI+DJ|JCv0>Hnddn+!gc-QNT!A=*HNt#HG?-e-NY$Ql(2W(%?Td|=X}k&>JDX>Qho^L;*2 zTX-ynlI{exzgSi1_@;^jBpMDQZkLg0B+EI)<${t8Ve`o4^T}huy%QB7qkjDd>Lcqt zebe?`+_3vQ;M4IKWrJ-RtcV8TZ1cHrtOkgi`K0jMjFNsGht%Zg zLrG`Dkx|=d03yT<@BS_}(by$Pm&VprY^5NJe!UlB!p2dlTJ3+sLBi-vL#Ow#>SE#M zW;xUF@r2)_|5V`krTVNPJ=Y{&%t1$iX`w)*$p7<_jgCx7kos+BND)9lieF8RHW4p zD!9OTtysF}5D^pnu?pqa+h#JFUgsFFrfR(j2jb3m0cqV{nIuem+r^0@LN#?+HD8Aa z2OQsojw;w}PQ*0T#!Ns(6gzkd|y0D5~|N;sSfuc6w<4I z{~Pox`4^=7EBXHig^n$q<;0V_EU1&w3eY#3W!)97;26{rO zaBRv2`#z>8*qlh`I`3!{HX+JlJv>PPv$#c{yodhmZDC{?!f;*Jx@?uV?fVH#E;>>3 z0)K*Vi5%6@$EXz@{1|qVm_$pA8J6(*%FoF<)Zf2YBN5wRYRWhFz=_Zv@9!K~@ZAnl z?z*W{j*@-xhN3j&=v`Qtg$bAI=>@0r7s+?oA1;U*6nlX2YuHc)n0U!eYstE(Sz|eUEq?)(v<{ZB+#BB1_Qw= zC1Ka*iu8)qt|r`gNH9oKLlxe@rDs?USQrG;6`32@=Bk9?6~mkkZ{w~nSjUR+fPgJu zYOaCxOW^wsVu}bnyw9^j`asG$!*XsSprpB(fUxTdOQ4!oLl08zWTfHJ{;otkz`{^l z+W7Jvk*luoEMe;aeg2eU!m{Bb;{nZgC9j^mu`$3d=5|{=NCca*H^qF9fSEHK@Ezf( zKF?t3p0>c*H22sDWN{5PPTY(9G*eC065EW1yBJmuOgfL1ttw=bpB7*NWUDMZ-a_OR z4pU{zFeDK61XH$Oq?erkBnJR{>+D{-ooV=@y11wqtX{0Cj#agoN5%9rIcAtLL0Upc z#u3X&tawAI&r`K?z13Sd;|LKm-4xsAl(6!MZq4)hO$ok5C2a2!V8YZKBmqEHa-}AA z#o{!)MGYCH4Csa``+P$4fOM^>mau&AH;X?yt1fFtbi^5F7*D7J8+z(+X5sPwF#&3GDfC7amo&zpGndIyycFCXctVVv$r9CW0_J* zieTo;&=#Ld5o2eK>j5IsFci7~&rQb`xfUx8@7$Hy-}SjpeGN2ebn+*qo^pa4)kp30 zinzyo;AmV}m4!pgu()0gGC4^H;fE|deO>%)rP_Q7pMn`ysp}F|QcwdQLkfTf+5No4 z6QMm%oXpTG#qD>~OMF&sm?|i)d%6IoMbYL)uk-Ptw?rgn+8+W@v68Cl{gLtwS6zAI z=KD%cXAIhU8e}&fJa+5{aP2>Cz5cI-LL2Ax(5n-9;-y*=Hp(Sig@l9+s44G|Zciho zxyFD@Oy0-5yq>Z-Xd2o3ZPoI=*tPMJJgZscFGJnVyt1YLsJRaX7L!D z_^HXy${qT!-{DamcbA|1 zqDfbiG~L)VX&R#y`?dmO|9$9xzk^rfT-Q<%sYdN;S$1E7l8PYgYgXLy4t1eCwQfa0 zPFFr>-jjD^MHanZuEMd;$CMW@@5UG1)#@7lX@Ao#Y9hSmDm}`ZPx%nedBpOx>%eK> zomsnHQFy==HL0mo#a7y)KsdZ)Q4D0W?bERlTK$@*CFL6pZ<2%+%fSi|YoK)*ftSo5 zncd3EZ`$G~{0@nQpMG%sOC^H;%9tB_Uj?-OHX6)*Lx;hi8YNK@sdwYy@|X*5xx~;R zrM@D*^zZ}-Om-)|Xt$^^z{Km7jYeDwIpgBXMK5-@z6Yfo2J~!fhB7^zVU5cBzVBJ0 zxGT{lEitX>oAq(+vFC_eKlktFK1Z;e#Q8|y(}rCEy4c<^R(3CN_%my3(I{ z2k@&s7?WY6q8gppLVY%f{Rh4%d96vyVBbZ%0!>DWOMR37Y52ZUN3U+5{C#CS zoUWgcr`}9VKp3RbYAV5<_{RrRUa##9f?8BmLb`>xCwHviAY(-WA=@L0v8uPK7T}EHnw5G(L`?~C)pUZRAf&A|n zS&WuXN^?3JE@OtUEakD&lFznw?gh`3g6@~KlHAGPH7|=b<`rP_NoQG}(Sq@@2+mEg zt}Kpgt@Tw&+&V$@4uiK{+{j^4>+bMPN8IY6ej$$N`53ITWN*X0oMrl*w@K=Td7HgJ z*CR7kQTx~9hD+)* zXnNFej+#Nb1u1}_;=Sb;|EKlie>0o-v8& z(#6jZvSq27lZ<`)@oL+g*{?S?B&2?KKYR;^<-#}Oj^c8yh}Dt4Nu$<_V0&jM1>g-^ zN7{k-?G)6k2KMqfqdYG5cK&uh#3gc0aVAJOgOVvD@jclCe*Ao?ZnF!MhM16TR_~+_ zRW+Y6mKzJUe)P_d2fqh{)m-vZFTo?0ORQHhWU3?BgnJ(dEI6Z8eN3K6IUU!H=vyC_ zjcQ4k#f(7tE`D@J{8SKNxr7&TFSeNq8F*5EteQP0n=$6D9`^Ee>A7)n#e1_!uan?8 zSOmgSwunh{s|o*ZGt~~HDTKMecS|3kWi3x~#4Hs&@^$iR3@1Lan2G=o7@avI{1U0| zn4fg>8eb9sC_1(YJPEQMk>k}E8?GmW79&9;9q&gw4!#Du*Q5=uf8!yQ9j2Vnc%8Va z9Fnfi+_4m@-UK5mHu=PJpY)BqPk185`BRAJkghX|K21;m11cOZ0CDt+RBVgK36_|T zZGZzp#ix1=%|vx^nCBZ9FbmhL_p!-C(pE*f zlLAeXE#o7JPl651nSIQ}G@`z9X_6WZ^{`r!>lGi!PdT~lvQ_k5UM1ln{VT$0Nl3f* zatn;g14&khQ=XFnl(1`jEaX(b$cTGk!FKk4cF_K>cf0P;@ToCAeAA3Yg!4YW(g4z) zKUk6%T6(=>K|)vS_UjFkf+&o(=mkT{)LK$UI$m3H{Z^FZCOTyPv|bhch0Xj{4BM@H z$8u#0)Gur%FEejx1%-8lW%1!GWd&g>!K&4i2rY!|e!TCH@(}-PnML>x^Z0{Hsq0G_ z`*hAchil3lX|(V&s)`;xvNF#cmVCw5K{hmIadk=EfZ`EJV&Ui-KZ{UjENTl$q`gSI^wil~ z>OE>!HhcY3!kD{ze9|#z+gi@hT4Vd=qb8K89pAOMz83PkQmLdzicC|Bg#f3{58HN6 zD(q6M5#9b8g%1xJMFd;l@qOQ4nU(QbG95-gc#nLn)G^=s2A~=Gse#`*s7|ZKWqhaM z>52w_>|H+2h-yOCWzTD{Gk5A)6W#y`@a8Uc_jCj(F}HMMMOtOvd3BhOEj22GNp1(d zOIyLO4ti7pP+_N+@RA)8*UPC8klZzuEBS5X;3IA$@}SYm2NswtO*u;{C_Ovj`tptC zoCH;HlVd=~h^lOIr+2Sh=g5BYa|huMx^@~zdnNLGIdKEy0$uwhmn7fiClKxd3tY$)UZQLvw|BI2(bSjh?5FySAzZbqMHh~-iEz-qKE;1@ z$`L=9Td%(xc0Qr`<%r7@e<|C=e!VF&w)(?>?ARj0<^!{9cDq7f)NSQ}ce$lCw-OvY z)^Yerj$?8Mwz-cIkL;5bTA2^^9nisv6$LZ;L0rRO^*&*X!5LAn@-Py24a%v44Br8! z#bRfO4Qy-9D^y~HKcZ;AhCA-{J6C)Po@0zJU!2AGL%=`sZvt&JyXAh41U>8M9J{e1 zWvQ(X%!{<0=tVP4JJV}v;JqE~9KM#>cv6_?FbVAn)G&-EAOc8Z!#>3aCL#-R??Sa) zL!^N_d}e?pJs~ruV8i!9FA9ESteGOP^4rH^KKdd6FGWHl+jZ$2->n^t$2}z2on;4DDh_GGsr7fMDb;^6Evu5_^b2_qcW-& zXqe*Y^1JuOSL?(PmRqa7+an!q%$7MSN)QS^m6?Z$(? zV=U)wDsgtWB9OJUHs>#e{Dq%&?Q?b z@n28a$W%SaI(sbgzuBSQD5YJah+nII_fLjug_g=a=>O_t6<{pc$9{!-enZ`kMltBjz=8fo1L?DQ+xObCu2K|P|NXgCjoq2^|Ee)EY2@`?R?U&W?!C_V_fZ(x zP@bT(n$WP5bfH_jl(p- zt-Fwx0`&n6-2Mm?5%@)n^OF6kJGuTr-h+orbe(E62J^f9Bo^OB9@?9T^*`z4ifa|E z=%Nzx&pu?jSdIQ1Msgrd6hUp;4vgnhBTs`wymczi<$5kdhb%JI%Oq3C6-XOi`JD+^aW)NUFD1Q5_E3?6$qX5^ zBW~e&iA$~ZZ3!s5K);XHDEX(2+U0(Fqv17WNxGixdkED{_?`si)s2rVB%~`K7-FeX zyWB236tW&0LOKR;A;ClAO4?0;rb`Z&*Gmto3G`5VQXq&-WOkH zV?)qwZl|2r7q=cCo4yny0HEZJwNf6DE`G@W!sZ&pA*EZl(lDkmmHsJjMkep-*U|@D z!Cr@{ztK}dSfx2%ciVp3VfwW&;qR0Fu86-|#NS=xe^N%sf8)gV?R7Q;c&>u&Td$e_ zlz0Ey{?nW@m)IXZXE*UOi8ZTAN<2>b40cQj?@HbMw(W;3w;ivU5LLSv5};n-B&L>k zjoCoSP9w&p^xkZ|(ku5zVfl&6Q}_AuwN)>(Lca*Hu9Hw$n|N zky}ct{K6KAFnNlA8zEt`5O@ONk#$MPL?seWz*{En4MwIzw^2qS5V0cSIc_B}mZUd{NU9sPc<)WO zKJsddx&=~ESr^)Ekkx`0P*4JU|ZH&}Il zlf=56Q|ZMJuBI7+U|3dOfRsw|!;cngWoyiCB=ahh8vr68Y)&R({BAaM*oe!unawNz z(R7?g@!)w2?`7w!`qg%OY2@m-W z1lKi8eq}4G;GgmRw3UpFEqHUIY7}K^$xU$_3X_RhVk{5&&U^YzGHv|elP&K__E+Ol zb@g}CEmlA3bn5=z8|elcK(Hd|HZ5|J;E2sBtz`ljMe$Y%8lLX{<#8hr>pQBJ}YaF@9h|>Bwqb2 z^&13g6Lt4|J2%y|3rAP8!j$L~qbx&tFma3ONPDHX!>0H2f$Ay{6(O6kY@`-lqju5F z!$a$^fk!zg>KoWo4fJ*N!kFO4j^$tdMVvGUE?t8@AOKP=L1%PxI&9Qt)*+)Y;Bf(4 zw%Zc9NhI=q;uA-|eX}V8yn8qPC8JdId6RFt3(#pg^vw%q*tp}4ngT8Ljkj8kyU(y$ z^SvdICl(3fHC0cCWgTl35K@0V3}AmY$${7W`6i3eDCDN8}YCESYxB?X@YWVVW-F~z^LX$qZcg>IgYXCWzn6QJ+nL>bBmw2_cSfN zuNWhq?g>tov8cjj(J@r=VS~ZU%_WgUvw-Ko!sM3p=dsLgJ8{TVRNHAQ{aych%doEL zT^936tlCEdSSk@~K4M;Srh=vY&nn>bj46C=qLWaPn-FG)Dy!Q3@cSmFL%rUnA`6(c z-ZP>ft#Q$P|3*u!OmRl3mUw4ox31jb;?B~9`KTAZa7W$XJqsze)2naDkaI_r)@UF& zt*{=ORHx~MS|gXvt3O&|9fHcXPvxrf{2qF*Shc^;>vW;0n)hNleYu%MJ)rG=v# z&swgFwn(9G1d~r}&%bjO5*|S4YCgAK@0nz$^(oS-t`adJn;w;)CsCsI1FxL08@OWf zFd19qD2JwKm?8uc5KvKs*?Y^F(--EDyT6<0KGAY4ArY8whu~tyQ7RHnbu0_Ry(1^> z#`z#Eu(CzVwK%grV`helzH!x4F<*PAngg0P#OvX2(`tE@JGQ}DMS*dv)y70t9E>Pa zi9$2egfdQRX%KT8uJ(|3hIhc7%i~fNN5i*JV)|uoVU6b>b}J_oL(J*s(qrVbz)j;H zCCeIQjw;@Ih&_`KDm!wZT9vpd&3U;wn&(YA_3buX1ANpyV?I=obI~R@o0PG?CJvYZ zDdZ6NC<;_XlBg(s3j(RD%K9nQxzs7*3G7T0QhCV7;An=p3&{CQ!}~Be6=_XiZpBXu zr9!uD5?V1zyp6LjiW*tEBfVMj2>OG-Ne;d8^~#K20q-t4MIoF&`n%V8jW3 z8F8;(rES&7kP}#OZ{gS4HVmQn*v`KAr^_1K1C=cyo6J$eyPQ}~Cv2KMWHuvE^#B%Z z_0PN%kCX_eQA#QMkv7!vS`KH&z9u04z`VgFQmIaxMff>ge{f@qpp{M~>%DjK5JGqq zDnFooVVgyi9&gym{cM++pUvmGP_vXaUQDg)u@enr2wk%*dlx1Wihma7&kLJqdrwL? zWhTElG!dVD{NuX!`qfLu3IjtOfhM!ZkGJBqvS}$j7P{9T7v>g5(2438OG{-g31_`l zn_?4XGhL=YtD2W{-f+ABa_F@Mjt2!#ucUrU)Kw>BCnWJvPTPg*JhtHtVC@Z4zX+&W zmo;??Z37GBG2z}5$$sth+N~$0`>2(95abawGBAA!-?_^`yXHPU*CZaI5cL+I5)tx% zIyO$B2I`Ti&ffKFLZ^X?7o(D$mP-xgt^gOClmaXq-AGVS$QBNv5s$V(ATFiOvOqwI z$bm0x7sxGU_3rkeMhaGKP6-zTzOWIBpZJt1E$Yzdq)|#uB|j>99+4#ho5lZu><>TF z1SqhWcQ&76FKf*}P%uE6Is7H(#;hclY0q{ebuXrh)LWA*miZ(W*7!5e|E9Q+~af4?0$%b z&c~Si(1X=yh#ZSyaeBRBn#dG<(jWD_c>KQKp2tO15tR&f*}h zw53&xr8zR~h>2U$i;=U*kC(H||OsABHk2vv?u zwagLY1c*<)3JF9*e+b+<={7R%9fppNe49Ncd?#>l@GuP}TpsVoUYO*jYE%+z=^+FQ z$Dz3vKL%bXioX1!fSRAA_H$ayVYR9#v2qtaX8}r=EAK3;^0}wt++Xp7iZW3Wd;&n# zjsRE-;1745eck^d(p!)V*q+^A6bR0cz0~j|PL&D}3aF+HjH>HFs#z~q7na2FL|B_! zo$Xsw_Nd8l?EDb6R8i)cU91b@rC>0@Ze&OE&gA8q4=U2Hl6eM}hU|bhAhC1hgH?V< zajtoO_ws~@#Q{1jb>D|2^Bju=bA~DlpSw8$i8?J9gr8=ZZwOcMg3bEP6thuc@$N8c zt-uoXdF%%U|4ir?Hj&YfM>ZHJA1AyVbd>9+k@j1oAfuY;-nM|G4tG$~0RYM*A`s>J z`^;vX%V9c4USnyUAhGQy%*}_C2a*|7L0T>ZD-aJsYymy@raZIb@M9)~F=nZ4+bMen zC-Bz--z4_X4Q)I+&tKRJ(f8a;6kNO^Zr z(r`i>f1pCqQ4s4$?Z711u(ERGnWU&s&s}JoWKlz#gct11YJ{=kJq@~YsOcHs6amfR zci|~g4^Oop%oLH_dHO1ntil2-IJEj2#iwFQd`N)l=vXe(p_;NE9ev!@!VNH0?C3UmML@2A{3AV_p!Cq zJ0Ch$>;N(k?E>Jnp1$}%5U=KkR(gmQGCK6dOrZ>~5oLoaw!fK|e3Al5v)%whuw7dW zPSX)PG1)uT4LZMF^!V*xlk)$GFVIjTF`s$;1^#Vmk-j)COTB{R#$6E#?*#(-;uq4nWlZkh>HSb#H3dVe;%6mFSp1Lmk{~3W4}|hrXwwB z6*CS17BAGV6%K*O!#S`B@ju?qAITiGi0c)nxvscctcWH_QuK>za2{@!+~KW}u_C(i zWdfU;r~2<6i^lXT>U3pIHn3;vQthU6s^Q6^yqu=0`CEWI=XWDzms@}J>*RK&%%NpP z$7N!#E(CyaF+)Zt!)s2HJL;!OY(yEm%S9AQ1}N8oh%==%oMuE2=bS`ixXTSxnp8q^P2L!guek4KIO>8Fn8(;aUgL& zqmHiOX}o4_ob#Vb{eLvK|4x6duY1}a4p20>wFEu>#&PMh>B~`Xo4BSG*Rf)}gTCP4 z+@b?+*rdKy@BAV^Pfzi4^!=MA`k2R-?^eeIWge#;(Ud_vigGFK(!Qcr8>7i{&y6yt z=9E3HZ~gch%@rztF;Z}ZA(LdVu@&Chc%YqFaZB9q9nBhF1-kp70OzaCU$MgsMab4Q zP=tprwQb5A_eqzsU(c>Th*nOhoFGR>_%Q$~O}8YozG+^WR~MM|RvKB`UL6jNzu!OX zkqa_JubAqrT;2K}39^bko(#U0eL=f(edCAj`-QsE3hq>*zDV7!MmK!Cj?-endWk~Va={9=ha@|o4XkldodaD_ zgvN%kHi!RQRHmUI$%RSpQ@OdmPV{itwdwIs+60?qI87AR>`64=AXc}L%-;+b89H!k zFf+PaPH%c^3~Eh`$4m1jawa*qbX5mTXB5|cUYsz(AXP8r`fZ`>I87Bvqwo>;170J= zHvEMUm=P;APi14r^q!1;%7DZeZxY(Xi9FnwJkEW1~&4IJ&`WM0+r22nsC9b6P zKmp@VQcj@I?~+Xub(pKzz^6o(bMT`rrtXi8Yri(lC!r-;zs(_@Vy1a^ps_bPa@|eE zl|L$g+M1%wD>_&bRrWKV?CtK-qA~X1P@21$))tly;_b4Rb1Gw{6KG;a*(=Ol!1XC~ z>rLW))#4gHQ&R@a?+y2g5YB-_crI8MI~8|QNEF&YaQ=S%{*DSt%LF7VlugEN_-NS# zN+b9_8^rma3~|R0v)3(}dFMSAP1?q?=Kk~GeEbkv^ zloc0K6DGeGWe8*E$O-18$q@Wyp zYCV!6oO;?}Ar3N<)flxn?L`7eYw9MXn3{?7Vlvh9oUgsJLDf>hsXQwyl_+Z|c&6cP zI7j0bwzhtjFPqoC+_!M0vTNeEW`n|y1?`SxKR-RPz4lor^)p9!_Cxlk&e{gsZ_RE4 z^e@P8*4u=qhW<_dcNIp=DGgfbI)4juB8mFf0m5ul<_N_jNi|aCojxA zbl0{<^5wpGLRkTd>Ge;YtwruaOBNo}?VTK8?J_<>7ha|a$v)bnng4XS=(p*CD_j`d zHW^&Mq!X1gEBvu@Ex_cvRF2xNIT@Q!^5Q z`uG#s*rVx)0@`%s!Na6wip|S_0QqT;rE4uSR!(UzyI6~_%Br|GAD}hCsE!3h74&Lb zz6Hb4O|e}N0BrEDWcm1pEAqacsFKwZy6^58%otE#rZgL!)Q&Xn38xa9C2n?L@Uc=X zB+PQ0AHuqF`)JXO&jTVoIT_{eR4E^@T5sO)Iq;Zwd3!Y17rf6LBsHB+YSQ!XL3#+ zIar%SykZ^eh%6PZIBn0VRv@$LL40Vq;k`#|zJ5$5CH&3y7q(sHhHccRAGd37onqxr z`B-eX8S%Rs3cIk+{Lx?MYAm(G^zyAp7VP<-kS2rr1bjvF5mwO9Fc z5w(coNaufNXposkIkp(?8ZO{>g!?z#EoM)J%70f8RkXb7P?%`(EUT^8SnBidU2ItNco4K3sj>+W9NFw;HFaG^B6 zPw;}#8}sEy7aldn^r}A()hsy(m0N3aoyt`3mi21Wxgu*juEL<%2nu9=sCl!AF6BNz zoThvdbUj46Jp7dQX7p~94$Wy#Th}WzVaX>w5=zQGHXfRHz|Kj+1QvyJCO)1@M86mq z*RtZ@0BP{`M!FT(xnhI#rJb zK6Z|~{A$fcEFn&5p(j>oY|(a=B8^Ab)kG(4tMES4qz{rR^m#+HjdZmTN`Snik@^#< znT35{eZD@k_UOZ+M6?Z=HbI?&?=sQpdXbiX`Uyzon&la5rP7jex?YJxW*jMjLHJ5A5}A9kR6k*_s-*l- zZy$lOTt|<;MhGv!nWeESVjjWbxb_em{=*61tw!Nzuvve>UX48Kk^rO{r%ecJlEoqL z?p-{VJeB^SL0xgh6aV<@t8s8xY9oi+%gUpVr?7D}-E5;ouB-pe0ZjqoI5? z-nL2n+ZN7d;lKe0%g1VFBbsD%JwM|ng^Nwu3u3M&xLyp0Lw4lyjBe zROG7Y=Piu|f*3|cCWc&G@ga1hJ%oiDhVy{>=HB*#*jGTS6s((IY-oFk3q9=2>Etox zqDNEJge<{gocsCmRFQRmOH*~&CZuv91R39GWWtl+kn20|M~FUY@`O+OLpST!wm}Jv z6dUz=wEpu%be)+LaiZ8S(TB7(MaB%C#=p81^vvSxdq7G@Ay>?;V8A6z;8l%k{u;9{_y`ZS->O5cJ{__qMfcfda*mTWy)D^iHavLASHR~_ob12 z6@@f&rb8yE)~A54S4qMFvOI8%E4hPhp^FYVfsN$4~;%Ccm)|4aoM3cUNrr7^OA* z`C|{Hvkv7ZTV)OQm9UAtICLLWRsPJ6*P90AMd7Vek$_QC?xqsVMi`$6$l3&>FY@gI z#Em!@N~kX7MW~X1{%Y3j{Edt?X=#8b&;I)U!G(M*mp%^BV=r6fHL=AzfnME?zRM>s zW@6iT8v}3qP_2U&ofL+K)ba8y7ehnu4c$R4_jzbvljBCl>)5bP-(=4Vv5hZ}27&KJq2?_t!yV2RYtB+G zZ>|FDfFSO6LzoC-i&} z;ZVi!cx~8G1+z~)pX;PKw#~}cl(f{H!O6+#HSg0G_1k|8sNeq61)$dSqsb}sgurFX z+9^1MI~J_iLF}?|oHOCAWSJUyMKa}$ULemT^z!HTjn3_loq1@nz7y>6ck$nK@_)ZU zd{2jw#OF3CK|xX+NJYStWlf(&2tpzugO}53iaI;<8<^v3gUTsuUMXjvDgD~cG&F6~ ze<}XE_SC$YrjU)f~K@OXMb?~(+g3}o=|Js=Bocze+Sys~LPQr#g zV7zlvlFfm~JxZmOTd-}6;ATZ&F>&tx^dAz8jqSg6XG;E0ccvdNBzWlj3@zuy4ai98 z-UbOPHZ9o+$S<`YMv*JM`FI?t_ZlF#KiUT&A^Wl_>7@6|dT z(Gmv;wTqE&>>#_C&#OVG}kLo5xL>PJ7X3=sTb`LMxQ2pWv8&a zGlbnz2ks2~wVzL9mHW)J-rASENU-@qN#^G2s=+agJejma(-XhK4y6vD0!K>;8+snJ;l;yJXAh&UQ zg;%PSzrsHPgyR#pS1|3~q?O5YkkY%Wa{I@K?7>on4_tF{8?U&>P&%32ZqKHLDV3Fz z3pOu3!%ohRX-aZ8@0^#5s!*endAUduJN9_#iUBrKbMpCgPOMv*lb;O4r?vXinxwz% zQs`3$GLS-5(LS$ISPt5u)18{QGqC#haJojsmI-%o=&c3M{7|I( zG)$L+d|m1#`DfzUJbjDzs!9T_G#m;Lh=g-74!V2l41ig=k!wuQ@i<{}%p!f-XB!rcc?1|eO3OUIMZ?F8-gobwD7NK?8}k{RBF=9Q z)7_0T^D|v7j+Y!cJeM|pWKQ;+a{-Fi@>a--*YL8^$dAavuaAiLnS-GPY4ba0uc#!i zI=I)=P!{Sx|9H-knwxeXgURmvWqHYxgle7+n<79=a;Y_VeQ&+zRh{@a;gr>Ph-2YY z-y*C>rCkJIeC~SXLk2G2$shaxivm({G6khWtw4&dsn8JDDmGX)K`t%PgI$NpVaq7h zS!5aa3;aDX7!RoxhrA|B;NZR0PN8fE*BPAxB9%5{AX~SwZ97@a@rA8l^Xy^Y$JB1w}q63Dz!fSP8Xr)BJDy8oOnN;0(+0r2#JGq1*`0_AiokJ2pkOiiA%JjAyqYX7m(vNdsAUZlAp_Lk4_?NiiI@(20YdxBc@=KR;&9>H+W z+A@f7tD4*}bqd>6IPdnn&bWVGw$a%U1n+JBsVFJox}|Zk6^k&(^{J`iz~)d(UGr*i zRf{RYZ$7i)rV(^GS`E9=(>3G2MQYxms2k*it}f^L5HIs{Z0W#(1bsf8KcP4sptMzANqBBL)i#k^<0y}=_u=n@Kd(nD* z6(~%J74}3RPle8rRm`_$pm5q2%+~PxQ$ZeU*hkhx~HwVE`8ZBAVJM88vOC2 z{#svhfVq=n7n+GsvaIwN;xu2Wf1?m9;qR10u)YoK+c%GG-cx0lLzYnn4@3_)vJgz|H)&FA&b5;7QnGY~_ zGV&?`7~|y2(ujwoHw!MH1dHr0IR!`=XXH6NW_c|J6d_e~NL%&$dn_?@KN{pHA6tHK zdCDrV^{Vlz_y@I{c}Ll!Ab?Vk z5xbP67LX<6f#3sK#3w1+_nSytGdh zIRxVoWfN2rE~ zwRru{y!;Up$Alqs3j2nXRYG08V>^FR`Zb`vyH%+t)PKIZAOd!_YG}=2+3&sqB zs3@BYn(Ztf%L1ZU=-SlWdnPp?ms&sG_rnyVp2(*7;;)zV%|8RqZ2uKNa!&piwsY56 zft>OSI{Ny1i>JTQ-Ow*(RH!_0oSC@9BFv~`b-{&YN-CXV=Re?0uVQ-l%BamN8-foI z1uyanXw;%8K6*Y?qO8w+tApV2c>$*W(R1{!sUf}lV!3CcIlohg9H9pJ8ulu4ZsB?U zqjpZtzNRm1E-S30o3<<>%s31E_uH;~GUaTA*ZJ2qHsJF8n@>x>4_zJ=5uKm|bBYNz zyYkTyB6ZEp?IsyUyNF*-dH2sZt=Wh6cZ(Z=-Lcn{oZ!f^rBND6vKy@OEUSH!GsYf- zC|j~hdyo#{!3;A8mj~fJ&2W@@XVbc;oSZ>4D9SzHS`>0-h{sLLVdTuu)YM?nzjvqKX6clMNNVCyY$bC6A;wDT(0Y-xh$E>ZbQ|1Hg7EUgVx*Mw( zu@~19RY4&Ljr>6;)DZtk>-6Ig+9rWH$`P03JoxS04BJ1QbUEUF`yc=DJxl@NnchL~ zYnI;YG~!8QlxZs?D)EC2-rn}lZ-|}mJa2@p^xz`zu>b}F#cf52!H@@`q#yxtp6g3YDUz;&FUU-}2HCCZ3A^v@?F5>P$b$3* z=qW#EKJS)TMC`#C#g8ruK{;6FQCQ2OA*CpihA@$Bb1#;Y$)PylHgvq^>kJ#qs4){&9d~yp!1V!0dx1!L|;1^CX zf=a!Bk|;hN>`_TITP0I|%@Pk$Odhbss9m4SBM|h&J^i!POMRJZQ(b9XowKtJwN+J2 zpfKWAdp_HQdQt?FaTCkSQ<9VfEc6v)dCWONEfIxod0S0`L!pVk_G0SUHKF`3a;Z;J zHVg7IxIk`}c+NI5WwW4vQ%+U?UP7i=MCMH*g@z>$B96pk&osCF%S-ov04!-l`W{jec!-^zkB)k51)L5%yixMz4Hzdl`AFg=$RTp1!0 z6B8-9zF}`abdd6H5+MqFKH_?p2OaBJ$q$0BeB)lA1TEugjT|zC+sl(TK!ph9#8}RL z#SIqx#BmDC=({QZZG|`;VUZC+LGK8J?AB;{n0irUQ2O^cxpy z<5E*Trn2l_x308PB(DUrp5FzIfU`i#TPC1w(NT}o{MW?e{DQ`5+v6;`a-KpyqDFu@ z3u_)43Sa(>@q+D_zhpSue-r)pO@_49ig;H{?ak~b;@9@XPk+lYdX8OI9&MY7f}qnT zMwPR{-EPdz*M*<-m5g*$LFe{ayPkeM#Ow z>z~CO-JhLpv7euMFBf!&{CVw2p?{V}?1iVL=7hhP2$tHj{R^I{^RH6Y4V;#zmsPJ~ zLPyH~%WYYuP?LL~z!*2#&u#<$pV>vlGSm{>)ZG`nZs+&t>?__NKA5rBc44rhB4Sw7 ztR6U8a*9IEO3S~x@)Z{N6%Uvr0g7xzjOI3x$M2=qx+$5qJJB~Ah=dccIvqmk)*DL< zQ4${;s>8!x^L6(9()-u5htKhZ;TTZlw=iiTfB_w#D$T;Ir9@Cg-bexYSh)6xbNwR; z22r4PmKD(R%%?vqL;wo=UN26puas9V?Rl)TvVMT~{7&$6eVIuO%>1(A3vTEn9U~mk@;{8BdyWmJQ$eh;4N*>76-iO0aW7%5& zynlpl#m$Ki6c85TLpcImy({C})P6t2PG~^MdZ-%s=*7S5a0Kpgk;6!1wy=47*%|A8 zv{2|^J+uo)OrQwWNkDDZI_rFHg@=n?Oy{GeneWH`d_C9A9I7Dh8xe^-FUT1aqL}PN zpHFRZzV<)-`vtN&{PoCyJWuhvcaG9*P)3Hw=6w~cbSvSL{?pBDWq%%W=enD#3vQUK_#KN@7uF zY1#0=J+9H>%#g|_a(`Zzy%2MMv&ad6G?RsG5qQ#=laAG+mDQuFnGIaoj-@RhI|Aw< zaC@29DY}ivF@VhX*DD7Q)KEl8#ztN7Q1z8>68^m4`QHToYP)U!E@nS?hUMk+9JMqu z!80eR(w5FsBd8LNqcqrX|KQU40Vfo1O2sW#u=4nQqw?pq*vsasLa!W9UDI$YLS=ff z_|Dh-?Sa{7wJXxT;KRCFxuI&dzq;dpAZ`T)O?Z_Aj~CqCea8i*32ntbIaXQ06q01K z{=b_~6j%uXdv%&@!sFGpqR3p1!`Iq)iB;SDlKfW#le!|~k)$g6Y@r5m6UaLmd#@sm zajB@l@glTBS1)GBr0$o}Ki}e=Vm|0V5D7{XwC2yk+>EmSCOxn?lNRmOfmYCO2%M+%MOK=V~-scLbp z4hFb6SDbiD8fCwpJoEj|96af^om`|$sX?M+@ARZw(lV79e0@p9>Q7OjC^cJ^$0xzi zzk6>q1FBJ20ER$VF>?q?+%|mmw%cFN%r*F$o8GDH9w?;NhH*`GKeS=kqy;3OF?jwl z7;3{8I#PjhuG^}9<@MJS!b)0hOlXN&jeUH;r$U_=>4;f?+8)loDv9=x;E09Y*19MS zQT8Rtpp!woBeTrF>6sq}{<Nm4S67vv-&xk>#x2YR~}|Jcu+>7;VVvG{ncgu z%b4&VeeFMoioc7O&;Q1n?%dbx8+dc<9IU7!KCw6xRZkUol2Y1ku+%L^uJ)*_KL|{c z#5P}e2FTOr%G3&E>@IGp6*?l01mi=5AM-0RO8d1{UX^L>A#$w(PynV31#5ej99Mf` zM$Pb=TSm-~*oADLj)OR9Q6DB}F$AgA!@w1KMRq(Zo(OofItn?jR9dD^;9m+U>uOmF z1}YSz06?$FIjfXP_lv&g$DB%DuTkgo+)#S!#cr7_pD2j`o&v87Cay88Tlm)XqGVo5 zo|PUa4#GXQ5$J`a_Q95d9F0l2m5(om@U*&-OM}%VX5I10Z&otoT|04CQq@twsnMkI z52x(U3bAIK?_il3;QbyF(^KcH29I$Mw(9#jz<=f5X}|BWq_%k&GI zqFr13Kcb_5u>^f#JAvrVvtpXrg}$@n%qi>^34c@sGB>m_Z{Mv9uFz!RP-QvaIRYNYT7}0EEWXxcu z;IpCQ%|j9@tkxuR;Q5E1l`GeQRk7@X}n95OFa0vPEac?r;re|cT%SCg)KD8;gw3(rB<|9R3wl~Z(biE z9%~su8ReC4nz|-`48+kLk{1h!IdUTGz>WzfziPM9#O04qmiu~q8~y5Cu4N})qNxY@ zEpT?Wi0=$~ZR+XD3pA`)vYbFKmT)`zY6R+QAw<}9?;ZVWFy@ykiZAwmkLBvfG^lKN zeeqdD1p(NWF1$=>X%{YZs(h5FTX}#M$zBR|X8LT9v<(KsV8C(6R8lr?$FT(q>Fc^f zU+ju0WPxDcKPbo~mY^jvlFiLPW;^u}eRUmJqfMM?u^XpA3~ky!co9V^3DfSK-E->Y zBITKx0~sBd70%KAwYfAL--N0F(!Gb<8t(>!W*VfJw*#5}oV=do5!(%;2^JgWuJViu zJMMZ#$Q9kefksVb?=`)S2a`fp!<0ojaLMz%4KF8BiLgwqF)9bWZAHZo43zP>^K#(Y zO)grD<1x)0gH(H9c)-^4-b*5_Lxll$=kufTC3H3B$>uV#vfw1(0*WEGh+v%Fl%i3O zwMIWyrxj#s-gd-yd>H2>qggor;)Sr}_Zk#zpOac0U5{c{oD9D$Y+-%L9UECP58Mp& zULB-+n`nKw^S=E+v9mlVez$8sNkW0^`&i7dji&V<^p0BhanGqr^_0<2wV&K&ty)^* z-90;zK(!4wpB(G;5g*iRWO%F`f7!DDZpB+17z4fjwe0i7?m+5%L1^XC*g`!-Z90X> zj>hP_iQK&_y^;e-V)jeAl33{DrXi?JxX>*n{qm}L>BIE11d@!IV6cpi1g!LdBsdNE z9-4LqA1I6C3>}`hls!BXgz)!6FseL6AdV^nnHE;>=@T-G&}^UJ2S7ehroe*5RFaa0 zsSooe@R58In5N_ypRA(G7)1g{y_|M$vWTzlg=MlK)6w}U8)-r)Q&OTiphg-Aob2>U z_gL{$w^lk|(3oMq8ZbHpli8KU$t{9SzBl>)PP2`szaM>|XQEGU$RT;A&`Hb(x7$u+ zzy@-*$5fDWoQleVnIy5xly7(}C#v%8TIA2myP`GhIBIEAb9 zPmPWoGNzWZ@(is6xqM+;XNjzJ{pB0MR>F7a6(TP1AyKOj`qG&(!&E#C4IHIGLMkQG zO2s;wZeq*cWLb@c-sOBlzII00RosENVd(>)Fyp(L49OXbw!l;{c!yegBl9M{JFj(TRc`PN%pUj$e7A2&Hb6``2$eX44V6Zi*B6< zt~()*rVHHmC_@F4M8th3<=YoEO~DIEQuC3PxB7h@=~EpwB|ET!!qHmwM;R*m_IR@{ zKbRU3IadTmDIlB8I_f3N)|alxeLrzkPk8kQikz-iNAYynCZc+4k1wTf?((p1dAd3S zUVgc(yxj%HM08Xe&j)1p&(Y^hRpe*ket2VKU_Ytwt&@pzxmWe6DvwkJ^t;?9DXQy@ zqZfq*KFq|#nr2?U&mk#ONlw;R)pU)F7|(1aIs~tS+{|vx@$~8rngB|>SZgftG(YHQ z?{Nc2m02F(Ow7Czpvsx!z|GYJYKS!)M;j95{fKeRqs}@Ktdu`Yu2$cRKStig+~SJ9 zkmC$ESt@jw)fe%r_+WK<$#vUWk-&;TO^P6}SEs;QG*T3B%ux>HA2D8Y7z z2&cLcD_IM{n|3Ki$|bqO7Q0k|iQ)jHmU$41GrC1QL`fWgSq#T__XR=)%&!>T)fsfZ ztRTARr)Mp@k~F zgG%p35fIdS*4_8Ld++DH@9*CKe)scv^UqAqnKNf*&UfaVnfX4?Lo(~*dBXC%%cul9 zRD#yT`w6nmTp7c0pz#?~(;VwUW6^W=;O#cA%}}5TT7{MCIw2_gVSPx>MCs1LkBt#> zcQQn2LA7v#ks)sI|akI?|@U<>$ z0Tu=xHMc<{GIrAaKb=8E>6IWRljMq3I7n$mlv8~ZGE}8;&7vJS6;wI zm;gM^q;hU;m2(Y|IH$NRwY=zxQrTvl!tXEdx0smiFK%xsH@T=iu&%Jk;8p@!0Fe{r zd3*2V#3fTqQy+b7&x32`qbKl13f$ORDbISwbHxhQpf^x&t}?+|I!Q%cM*T@rYWhzt zm0jkla4c z62E;pEH|Y1Y-5gr6PKb7@BOSExHvf=paN(r-ysLqYbJ}uU@69}!W(9skvME)y{6yP zaCpqKoQ$i-=R;4B4U#R#Ppt~~5%YN(~tu2<9Fga#}zJ6|)F zYhN*sT8MWc7hI(6!|?}xQRh{wtf#Ntp5AVYgL;9nY2ZPr!Kh#m#3`1SD}Agf=OD24cK;po zTye;-1tc@CR@7L-+qrObB-kO%F3z_1IjJd0DeJ724{DD#srszz0|Moz zuL{<(h@OxXqh03p=9G)l@af)}C8XmT59Hy`t!!@kn3d0<$>`zrl&pkp=#3L(=_j>5 zAFwxrwiFVYKjr@Tip6lrWWK&OnMK;{-}lbzac?Lcf;|+L@)I4(AQ>83HN?C%O99D5 z4Jlk`+jlKHp;+(Ga6zqDPTbj?Nxe(6keoTa>0B6(sZx?X@9Gn&9?{hVSNupYPMh$u zY21qNPM7m|Gq+4MpK6h3s<dF#&XvT z(b=T{ry8@qt!^S_95Hz+`*dC|(XLNgrEkUoj@Fku!tVPbIV7YmqvBc?}{>Mdrgl;!D!fg6Y+e8 zQBbG^H(7<9#~tb>iwZs*E|jHrI#~v`4h};CYkBxlA6*T+w>wu?8WtMV_MaonSNR&DJ~n%V1se5 z){T~jZz{igxoef4a&bx;b6&x{zup=fqxuWdc(SI4&C8S{^KHLMwoq^i^X$or_)NYC zpvoq81Ab!Gu^WDQn!MVY*P4$a1mDDiGhR(`6M3OJ7##SuDP)Y+=h~H&(MASdsmR22NVp{#f;2;N7pnwc|G}cf_iB=fMkfY9HcZ7S*eH@ zbDjm|dJ(W|(vo3NBi~0Xo-X8z+}e7?DRIwFCLW&e(vP1|RX?7K*FtMiqbX3y={O5N zizNj%ZZ%RopwLC!GD;8g+OBNoSKe#uB$7Ru6?s%n7{^*i5SR7M#Kl7f6b$xj+63M6 zdg~^Bkb=ZORFXH}HCF;$@p4@j>zy|~sp{QH5YF;Zm$lfXrtL>NZuwCqZSUv|GA!wD5-b06KjQB(dImsTO&To= z`A6ic!q`UXiqfLf@w2hFL~l;4K)MzX_@lpd^C))`M8Y34X7Nld6L16^qw@UB&yx;W zcQ@`YYU8wv9~V0j&d|pa4rlfuB-A1}0-26d zEv?yTwx7P^sPs|!gz<3ktePv43OA1uZ90wnW;#X9`lbhBlcbpYA9zu=)}Q9NA4`3j z+m{TJ-;}QHQG7=|xhJL^Yf~s!fIOe14R%H1>6>~2w~OONTp7NEm$k6iQKf76LTTxg zeJ+G?G(Gs)4b*1+bVHT(jj&XWU!LS8{!GuQQ8~t7#vh1t=P%%gr=x*ocL&$EG5!uQ z5ph;Jok%ponZNJ6>ayuH3*s79`2dB13SQcL;%V$$g&w(pd}jLib4$uoOFfyhzfcFw zkOjt#k&sZ?esmA1w=r?q#&BNrU)>)3d_^-d=~dy+SD=TTo%!nX zD;!IL9wf{V<4U3hdG`{^fX@SleL}gBuU(Sx2j5ytmrF{vUpja`+csd?23&xWB^>T3609<>cfMB(woWS|R>D@iV*@?KB4Xz~3$x z!Ccn>4lCQiJU7#u4Od@RfukBpzH|NPaee(&^ArP}T`^bv-_6&~NY$Zc+qFz{3^!Yy z`{nBUG0$Vy69eG(qqe9D2}DD8&(yrXr#5_3vZc#*>6;K%H+RGb6K0!> zV_2mm!HmlZb&EGk)a6qo)>5 z=6Y3}4igDWRYRHtX|~rvbODLhSs3=(zVxZ$fRC$pT#!n#01LtTjJS{mpXtB!Txmz6 zUc>c0u*a&Bb%LQBl!>A@qol<{ean79?4azKqdLdpbR{BnSHiw@OC2)rKQ+~Kt9)t% z)JAWy@MuipyqY=<2vUQyv1rOuSIn$Rg==X`_{iq7(a?^UmeXUdo+&DD(IrCJEvUn6 zbtvI6ovD6pv?2Bh=1?4^H;{Aj4Bx=OKzml6O_W&z zct$ulwVthRwaNp}c2grVe$K`CTtH)N&}U2pV!2^2K4p^I%NT%ImajdF`EL1e-0lWt z&GO&zugxr?n+rR}lcd2JGCKYNL$TqRl&#LN3|mQS(4zT`!;WpeS2u)l&Zbj#S)_$* zY!0b_Qu?#oDk zlzeP$Sy%k+%5y!~$^#Y2_=7~tGc-~Qh3iUaq4sOBu~d659vZAx`mA@p@l1**cJP|l zQ>=n(7s(WbvYQU@Qz2{7GnK~xMJlY5&s66Rs!#s#9skGgUqLMYS0a+$Z$b+aM?Yq4 zb98>H1~_*a--H0t-U-hKX#wR;zy5F^bC%y{;ApU4T%;@ej4X)N4XbVr%*!(#4a~2+ zIrcc-r7+CfXwCD0NHkK<3YDJS!AFgRiu7OpdP8baQ+VdDAFD^7Q$G@9ZGcs-%xDaSKltQ!}70f5}BC8K1HAk7kNmz&s*TjA4 zCi?CDjvtinzjDrg9&X{Zztjb~c2r5T=$V3#?;F&J8;2j8b0NrmeeeGIF4lnYlk64N*La!lyo|m(g zPt1S0f1<`%yTl_UqQ!^o@Z2<5}uvusH!S~co^3; z1w&W(6qQn^n{I}9C7Yt4vizsst+c%ud=<3kjv1o7~z#YUm-s z0d$e4&F&cq8gXb?CdZG3dXYro{PN@7JUL09_-HZGyI@)c%-Ar z?6w}4B6%h-)9!aO30n@KNJ|l?_H}N1&q(2vZhJU4Sj54>k-qtBmyHT?qWM zKw{_xBPVf)^IF`KrxEkc1`Ukp?!bhw!I&QZ$FWI-2flb|z#9H&LH~!&-E931<91aq z6|gTB4ZzXp*GF&dNLMJP26Us|@X{WTe-N^dO~TBz8u!-uU;czcNEam_<#;4zi6Q-&N%#&Z#W^)C}k zA~)nbo;;4pP=f#UAk>QhEkqheuF*KlD@i6PEoZ1PZ7URPU!8lq;J!3t{!x*YxUxKP z`;DS2fv&Jctf2a)9*P0S#3b|6j~S%mTbo+!u_rI3@-Oq! zS~y)$@v}(>dl+Xtd(YUeKS6!Gd^E6^6=Al#Ka4Gc&U?gZn3h&SanbBVh`TX8=VN8Z zy8Mm9&0Q9V*ApV;S376Fcf5<_p!Qzy;n8;;Q;}gEnE>ZRc(9y~-w?KTWguC`sB1pE z!iJ0&u_u-iG+K&$tDh{1U_6Ic%LB^)tk&3aT4o;OH9H3&7cJl2K2LTgORYKWgD4%4 zer_sVyw)(iHn`v0zmK>m&~n3X1F{u@#G14@shEgAqxZMz+1A5^feW>}Yr__*KGH1cdNtNV0GYP0= zLY56jm}O_wFE&~|VW%986l1u!>Ukpxjin|k>2VelJQf%cJomhEOgg%FaTD1R5C|0N z4aJ)FIcXQ~vi%$bkLf|J+Qp(1b*%+g`6 zI{#BOAGP14g0wOuU;jBmiQLVZAu!DTG|$~Hh7~SY{b?1(Kg~cy{~AwE0PcDTf2F@& zZvOjUR`@`;11bM!BmI8Gm-1Bc&*lgJ7(m_gSA7plXZ?Se`Tl`Yi>E)FbkhBx8->tn zehnffJwQouW^mTNjAW)SR=t$9a;ikV#;q1@eI z(Tj$B%l;57?ZZxvik0wZU7yK`D5@E6`q5$71Unbei*#s6NeCIhRT~+-WmHMue(CZ{ z=@;7TzCILI!OK1`0+u|E<4!`Gf(FOldIsSYiw?bZ>;sWTYqH&gI?AE^ti?&xyNb!} zGe3Izu~~G$Vcj8Q7t+WOWr)Hl)oezoP%Mp~E^8GQ@cW-OS=NKaCV}m>(eUIib3XOf zQCTRJdk8mjAy_ejL~tWmiIcO})fYCOhbSK}y&RfW=I?G<6%3ngl(N(n&!SOw-bTZy zbNj-Z-090Jh}hd}d#ntHjH^u1rV=G+HdTtJ{;@Ir^yv*6s43DGL?3C4^%;!M=;Eju zIf|&R-XatjGeM02LDb?%ulhHkO^WwNXdLmHBR>X;JV=Ad;*#XbI4SCmvjc7HbX78j+SQUva1J7+P7+mLL9vlCkW4rVB_bBa zdR+H091e#A0%IigehXDwFinQVC6mywxSIjhEk(io=mz$LKV-x~!)xj1wn5f*kkoxt zw?N!{Ak@{ww5A1A7~&xE98uxrXAMS`9tb$Kl}(N}Zn3G?J#B?*>|4zjcj&d)41n_0 z)(~}NGSM6)(n%b4`b^RckDS#hFn!dD?J*(&qlmwvQ&Z5=v->}?@^kJBXGbgsugB~! zJR^?JwC^Us4%NSSgeyV;J8;PIW$P2H=#*};rBljG%3czr6cd!?pJcxHp}VOTg`Nq| zy@R`P<4VmDIk6r3Dhf%RFo;Y(x>A>)zK^PQ^Xv~s6+e}6E%KGd;1mXA@5mtLI)w8 z?-=ANahd|&WP?)~fja&05$;*@pp%x}r?K~85hZ#L3L5h%!3{$n>L$CZ%fIY78rh1h z4jN5PStuaxe9b;$b|C?M(K-||Y2=`j862D#p5`mL)q6XLwy*=DHvjxoYPW*8a8wET zQS5mwD7WV>!Mp~So%XhZDsgHFmMZ6(mwemC(}h-IJgXuS}*%bE#y z3LQ)B8PuXXcqckSu8VddwXV%EyhQS%$o(!c(UZ5J(q5e2wy#DHuHI1Wnar^ZWeyWf z$d2nEz5rlyLQUK>Ww_=HG=oq*x4P zmo_-qb~IjM>mgfG!*U8_N_iDG(raFe*I$HRys`rV0nvxWYge^SqQc3Hn8?|m&Jojd z_C_bEitlPu&i$yF zz)i%uUdLS?I^Q?moXrjJbT7j(sZ!k*z8mX)o6M2qu;KJ49CoDD1X>Z&u4(X?V-iz$dDikgxuirqDG$e&Vb`y|S9ESEx)eq;ANcxGP0a!06W|jt-}0sD z2sI>ke^Z(HM_ZDEu=&Mk0lM(qcE@-E*3U0%VYp4gTDTz~?q$IgI@_+Js2D__GD41| z>Vo5JM{MiMsZ4~MQAMIzLv-|HZZZV) zWy&O{%Ec<8?Tnp%d4&tRG}9rbqbg^&v=r1)V7rDIE|Vcv7iQkw$&DAGGg`SWUPn(d zc%0-~6I^h7>qSndlV(npYtzMmA+BEM0|25ioXky^Tyz=Yt3Y^W5?i!&l+of!=}tA9 zx2Sy<_g-VHWdJ3+?r@q_3m(Fq+(^5byh(z7(3DX%9Q3bs)4U|Tw}0DM=0cQt6#YVd z3yYHwnHGL?Jg&c-hR`_$m1IG?hOribL^_z2z~mhf(W z)i7bAs!Aq>XA?k~sjL|4DV73d_V@`RW1Q_jb5xxA3tJX~8b*0nncWiSZD0=+Sw++( zZzfjM4g|-ruCGaJV6t{X%;Im>buX*t}12ul)Ji5Ab9RQ;4{)i~qNg_Urc=UjX z^;by)BebbseULuYbD>ZBJo6uSI%x&lGUK63FnjBSl(;CKy&jil9t?HGy9FAdtG03$ zrK_2_iSAzGndr*Ga;)S0dbmFr1=r=|FUOQ{1xfWIzs57Q~{rRQ6 z*--r0E1a>*SP7)oaqx}wT)6yj?sXd&M61<)Q#^qZ*}NV zggAuvz;%yKG`zmurg+541o5NY1IiM{G_GZcr#=_*`0{+yw91TY)TuP;ynmM0P!eI~ zeZ|svke=7%$=>G50hpCiXj7^aMl9Mpi~maxEIBlNhDwI{rD!|R=BAQOG=`nG`y7w$ zl8_fSvz&T)l7A$X6`kl$&BJTF+{Oe4zYqBQJtq@kk&Zp@3CX3(zh8ZJPf>Yi@}B*B z2a)<%E>?22{FC8I0IS4WUiYw}Hv9_ma{0+XL-Bd%A}HCOWXS*eO-Rh+dyQJIW)@|_ z=KN;I6kp)`jqVF1^yTyK9<+0_vS;+Jt5JJ~eLs(WrY>7*$mBAD{W8rwKc)}Gb4=*N z9G=}^DZgnmZRAf=9d=&Scsm-F3=oV1E_SY0=lckH$!VP>g%F50U~BMR<82Yt9!;MN z?8@GlU$d+vGR;G}i`)X2B6~L(FWZIN|#f?6>U5KdHsDW!wnGp~0 z&<9CynsugIWnwKdD#3kr1`kf^>gs$^uaaU(QL!IfZeAN2x7x}J`m=4)dLUpycn?N< za&pBRk|_~Eq8$h2#>92_9Wn!zG;p1ES}cDsMEnHDv_+{I7%7~V^4wue3WK5SD%TZ3nM6gjFcwA$Y3T0_B!9hK|(5>sJ@KV+H*n0n44Hu{WRcZ@@4zh zNJQ&;>##pGS+Vjk4=TgK(4As!dY!uU;+*qrtz@+7<>9Wj69K^cXTpSyVwG%B!^ow( zvV4%*Ih^;@5B%iV1pWMANJxHYSmIS?lsl_dMJ}2ZOYP;;nm(t0iVoDm>*`opI8ASU zc>({r=UkzR?2q;(=*gfpUYWyZl|-h3+#zf84JWCF{1^p8jNWW{oCypw7N9DC@5e$F zT>M$kQb)-1AMsZR<{T=K49Q&I9#mMrEmI7)a1zE1D`r`t`DKafUse3h#^kd4A$yY! zueaFOy1+T6voc)($)}ZI1%)6C40u4}%*N1_n^I-ZDjHhDqCMLsJ*Ao!E%HU0@ql2( z?wOPwa|WbXBS|xfR^!PQF95459a%dYp|@Mb$)?51L=$9)f$&MzKjq#LyNKAi7@fD^sove3 z($oSwo%1wqZzGY$$}56C2;5EzzZp3(;(@b}byXJc=Q+-j2-#n^LUzw7XOqEkAwz2; zB%_fk`EfKgMfaRQZhGx;JT(CTv1R(}s+HdAzVLe4PPbBS66V^|i-GlG^Z>PtWgd6T zb)SpfGd0mdGW+P0eyEMi9Oau(Fm-*fIoa}zvdS1cJllWF$XL^{Ogezy{#;{4eTQvl z({JZhn`!3dYZNHT`BP%BUtR69<>}-{n_0=2b8F!a;O?eC3qPA_$>V~19fD|`!j>S` z4a4BTCN~Q}C6NwUI_CT1`Sffju`IU>tSa3yR5UR6OnIpby1uIOn{7|ml@)6l)j%sR z8+kOH_p}AI)m!sw|4%fDv_O1zK)b3s*4=-;d(3ND=Sj)QRqutJ50QpU6`UT(z;+Ga zFU8^E?qD&@0zgNoJPL2Nl&vBW$Lsgb{>?&SP8o+XoeefSX+;3J$IR9%4Kc2b^?lym zzYol+vF$^zOt1)UIEe2y_0mJhI#$JxcS^Oa5q5bfqlN^a0p3-tYJU|r-zaAB@%?FX zF$hq#O2VD&4e4K1@rgoD%;YAuOgqd(O$y`D{Ml3yMAO@gaNdTG;i{F2JEqFY?dw`Y z^wLS|AA@!^bn1H?N8j_bSl{pw%t`l%IuxvTc{K^Dev-L$9516Gzw zB$hbIt)@IwH-hZf*?WYgaL*NUX}-02ZZJH}b$h6K^TPDbzfWfVPjRW!KFNWF-MVm! zi7W-_o{0$Co?Nl6`CY8H$+qs*%oBgdltIgG>XLPfYS#wyS>6*ObAgOnY3(XBLx&vr)zh#LwwXmnCTOh?LR&7j=BQooBkj&~^^>18|AV~Ed{(3^I4)zmqa{D8!C#a}nnq@*A5i1Gw`Wk-GXLyin) z(?-KYH{&09t4sH#6vd@WDN7?xE*Rk(C{WuemPRXYc~zn2h?B&bPGf3cq?^UcPbH8r zqVW=epVAq&R5HiHs`*dbqJKCaRePzAZX&o8?@bU?E||dV8L{swk=%uZS0}ULAa3_~ z)u$Wl)kCY;>7|6+SCggw=7cS|{)w0DWtOVg&-Xa4C{3P`|5JvUJXvCCaRo_|NvWb- zKlv;WYF~l1i@EL1H5(YPb@i8}ufGn49U0mj9bsvt8%>;vYDu~MsQZQvk1uO8Icwf8 z)jRIDyB*Gm9)#qKSFMfMFvVtIrqmuE0ub?k{8m+M{H-2BpZzGHpH}GSm0VT z3|?QVepTP)@d})-7u15VnK^dvO;%aE+&BRQZ2sIBuHD<`+w|^npbJZxPSAHM)-3B) zIZE&Ijd@>&t@SM>VIh!ik|ACJqM#p1m%la7ggXSp{km-7m>9$y{a1WEFeqOB?F6g!OPOFrMCTuYV}$D1^`B*=G7@g+W#4SQU$SkkitI8rzw`_fzNd59!H7I*zuV zzpW0IQHIp({N66#V&p~pgl6T3O7>cWI0?+Vz6mLd6MEXu&6?zT;;~qjqaG^B03}4p zTNZo5dErrMK!P#bHO#&lCL(aNc)HJ?lM_Z?@^!UtoJ6H$yP#VMpmeX=)+jjtaF^jX zp;>}HqEy8Di%qBX{VqMDQE6(6ab@WUv+Ao`bYTyW@GejX7~X(SEZTeXnDu>>n!Y0- z8|19gGfO0mR@w{+dwfbVpHgvoJu6{jqWgTZsGK%h8M5@&fk#^sz1Hm=f8nAe#7x@3 zr_~Ur{JVv_!D%U0v>WyeS`+vjQ=WWoKmDtrX>ygi1?y4ael)~A)7X1ecs_Rh%7|f!#Mlr--NT za{MsimF0gpx@&|rj#sNv$SQ>cEh~CJdD-Svuqx@2aL{6O7Ru7(@aux9OcnOAdrg%9 z+5z!R2*0ecrgxKt=r_)KY-A8lmShz&PxB%bFn;{)ggeI;_2cz-cLh8uYT9=d8+dpe zS+3FIq<$K6<5i$yX^6qf>#MNOr(%-UYi`}E{*=Gtn-C&*HuDSnMRnKAXJ+d=eZr6l zKl9o+>CO3kw=`m$#XxT*`Q~bI_3<}4p3ZK<=peRT449nKtqUw2&@@Lt`2ja=K1Qab zHjhnDj(vfz29gHygd3wDry2CV_XUwDb-i_ym2noCfJ^>G)P1xfII6Q7Z2utrMsM`Y3kP&7>Ij826Tey9ivz-KoJ#C~Nhf z0x0?$XzZB9o|m_Q)(>lT|4d*takl+Abe z;iNhF~N4Oj+loE(+&DEBDn!dk+~qjsL3?G$cQllLHM(zNNNUD zY^(wphpO$>W1MMcT5DWcabdcF-KVa<4S8lIl}%B&G?@{&cxj>Cr@rMEU*)X+tc3&N z?|mRDpoUEs6s~Nmn>C0f^y^WxGRY4cmldh7Q(`@J1iCQeD_oXQ4d=&I4dCm%) z%2;dbC;L_2q`4H{1(d?(BTi(>4fX?MFk1kjomTnVQ_g(2=i$=I_55gFa-MPav8dZ} z8$SK*izcsn0SAp!4iV^@fc7#?VSMPwbas+0JEi=iDYdC$$)Voz(WB`HUnikxT@{oa zKnITj#R_M|tdyUEv!zsUmEO^%Rf}>E)m$~RbNo{lN^Y|4gOFIJ_hx-j-88mJ}wdX`Hc#o=efK6;6|-RsuLa zMclxr%GjEuU;hp#{nx$f|Ly314N3j`9e+H}r<~D2xRRSK${ak{x}b>D5mk!YM0`k2 zgfBHIwTX@1R;Q^FWajWJtXYg{!mw!CszKw#&~^uu)h55FxKvTM&XhG|VoV5_z{)G!TM<&z_T5H&+ABvzk(a*yy~WiglK5(4zhZO*54BmVT$xd>|1Ts|D-j zflDC}1v2WU%rDalubJ-THkx=?nLkX1#X<2Dx}Tpq7F*D0Qdd}|;ExiKTmrmid{dTg zTt_(YB*d)GeF>FY^U50%ywsCU0tm5gk#Ap9(pnnG7C@4eOK5(VzowR^B9F7|e zuo6_X)!e^2qjKU)PF9AFC?#9+i!5c@v&slUI&1C(2wD!#f=hwg=I zI0G?v)Rj$IU&s5$b^79ux&plewW-C0P*zRK9fPHWyP|^$wbnT~AIo>tbXejh4p+(I z&Iqm+AIPdvv<582~|--&4L;FJ|A_=SahaOqHUvn4NcyY7WXAl&Jee;hH=4O~3UA z`zG`?=h+Ta4)s)rqPN;|_;5R7s%n^RvRQ0I?(SEGI^K)Nq68)g?JSxkpTEBX3t1vh zj~forHXEK}VxG7+I~R1J6s({ZVx%Rl?I{B6>qVE<4nMb0Xq%V?JmDN>~!jm8+c6 zC$XCeH|4)Pd>E&Z0oic>CPX=c(dQlgtn&Lep~dDealsQi;>?LT0;BtFC-ZJEq@y)a z65JBxaAi+pDNl_XfCE>!U!T-yixVf!jE@g7yN2W(QkJ75ZF|!WfK}gXq*h^m>nJC8 zvt{>pa*V+J{livjk4uM=Qfpf3-+6_sK&|^DY%;`bXRlBT>Y~>uI(dwdg`O51eaXUh z%M{ioEG8nRfi~cz!!Fs5b#wX|S$91OrgL19z`x>QTnj*P$+95+%kjEf)5^d;AhQ6v zp%Lz>nOGVwsu!}fmY~PF$?RGZK|F{Ih?wUMOC?!9xb^woJmN6@)v%bCTL;!|T@%H2 zYwRX0ZIR7WloXEvlyw)y$Z#)Nj<5k)ba%Ht=K~7K<7^|#NLR&Ab%PMjm*wANwoebT z{H%!q+fCEaF|I@R?NUmc22*E!lO|-(-db6T81sWZK;R6*b?AJ(b70G?wtX>FA0;8W2Sji1o!$I$LBP~uZo6oqR zF!|R25>kC~Ps#Z3vbJyAJ5sK#zJ8i$W{QX9I#y<~%$rqe!M3X=x4C09lmfel9}W4h zZf8fkd-gokgu6&Tc3_<4I;H_!%u|pU? zL!26K;H#3A8GsR>9!TFU!7GQx*z;h+qiVn_8j@fDE*||lvrU`TR|$qVsm-(99Oejh zqC?mFQP#a@{igWHxc{B>WX6R2DCOs2<)o^mdIk9^Xy z4$R%3I#;zxo37w&%GNw{lPSvUIM-{MZzh34g*OZ_O17e1UM%;$^ENZDH|{B8^s>qu zCdyY(W0M9l!-YeuqcA6@v@#iG{{H^ifgEf5cykX;vW~LWM!#MDP<2>{)HC4QiTRXP zrjl)Y>@LO%kUshVk8>X94c-h_{%CG57e|A}{bWvNqsnAY$N3}@u@274LAUnPj2k|C zm2q6ew(9BF45-?z9hXwGmctT65S^=pjRY1;bD-y3KVHI>pmQ=Jtqaf%I*7MhvhMm+ z!U`=3-|M;u?2^o~Ju1EjEZO26&9P^!M@(`*>LnGZ>Uk8dBG!}A8~bItmmn(7)VEkl z=bjyqDn@=xOAGilJPX(zPf$rqo(mtn=@F_@vX+0b+*|3;Z`VyIw0}S-HBTEW_8WXNake-pm0%WZTmWJ9bAmgoFUiS=pQ9pe-FFI(`MUu= zf>=QCa>8M8XnZ7^mFVbFk?_Oo?4;GEA2YORGb-6(l_^W^B4?cO~b3$o)4ssDA*T{tW_3 zX!rly*VMmHecV~hayI(fj6<$GgBy_KM`rr&nPgQ|YjJ#_f%4ep%~`y=qZ+jt{k5cY z;!V>bODiwuz#Xg$J&;PN2Nkq!5&PKck6P(DEZ!kRC%jFxQmY)h%0C(uSo@qXQ(-f_u4Dyz7f!k-P|KufIA5GnYsspK4XQvbn^}Wrrom$_%J`*SwRL#~ zm{>bXB)K&Rx4eA9idF0JWI*@bM+?B(>fV-9RuSGz6*U)2ZTt<~ZIe0+{bncgtcJIL_uh`3vuQ#g;FYpo5 z{i=bM78A`i{up?PVfnCz+i0L+``axQ`2EheOsC(woKKjX+nCI`eU+3)c96<+Y@RnM zEoWEjd_D6cxuxAD{8FDn&YQXudHQJa#ET;LW&oEtX%C;OiHkDQ_*r}jg>{F$k3&pa zQ@fKKXe$Bi+y-|qxsmP5$baaJ4KZTf-bo(&eL)WL*^Wvf-g$cBQ+-lgSoxlz$;wZ7 z2q?Q>N+~oL%q0@9Ms+xMyzdL>MvA^Z`Rwirq;%4`R$5>Ct?RWiF1I9^LmAb-l{(IS zE97?WpXT^)zVbgE5rrk{Ojgvt-}T}L@qb?NSLA>p0RnLl7Xo)6->I~pF4fqMN~!eJ z)BP+e1nvyxC;|G^=W~|qE|I?e{@d=4`5#8sb14I(PeF7DME&Dsp?EWdziT+6iSTv$ zAwLc>hfv9P-yfMBm-a~`S4HjSo_LO-Sc_P;;9fAfFGU;elPS8s0&?ADhFMaN!8 zNU6;$)30jVW?PAkqE2d^M86B;HaciyTg_VXl3+3q_ zce;>O`{iQBiJ2;2um+9pLa)DvTGibNLpfLWe-Hn2>OZaV-^n&!9;sSH5jI&v%|buz zt*IPfb$>7_eEj47{59A0c-%k7)dGNQ2TYT zT}&XbSR=KqFS39*qg$RNaRzUq;}$&OdZI2TH_qG`ZQk>03Npijv`?U>c~)7vtL)6EGV2$?835JkjBv&jD$od?dw#oz9Bx zHJ;?OdsiLZVd*0M^wr4ndXK)yY(+Sc&AUtycWPHlM2 zIyW0fC4-ct0gBCK3+OFtEg7Xl^jb=0!6nMHX|178!~t#3=_5L4&!1f} z8@#x!o-IxO(o@%>K$!eM@I{Te>gem6e@?x02aDi!b-Y8y`(MRt%4VQs>Xl;Qwu4G{ zauz{lY8AiyU4Zmop;UjETq8i4!N=w9Aae*go2u12Ws@Q?0p~zFEB^@3_a}A-8}9hk z;(Pd?Q~zm=|JcTVy2F3x!9mDYNCd?`?l~t@%Ww~LhUnhfH+XCGS=4EWWV1kl655^8 zM-e1RRb9KcjN4IMEM9~*!Km(!G_-20FH`4OjNWkl#f$#(#B^qki!#VCC#*_su#d%B zXj*46?_FxU3WaKQAupeoUxlcQOb(+5Nlzr987~UDUT2&eKx>hgTBrM1U8wDNNYJgl z%&25#hI2r`G*eWeQ(8CiBAiOFkBscqjFzMZVcZB z35`xLt*e^~VcT($)&l#*tS5h;*!(N!9A#YrXe0aKKS*9r&}`pZG>qewlk9eybafdB zf}ss{+oBECA3&80U0-vjGfNSlGw8G*jBXBF&)y{J2cBhqR=)Cs)Az%1-;db}Vg5{7 z()l^2-9qSY9SbI6$6!<)4@2h|x*4vN`irTMPv?h!t$q0S;{A7zpY|tL!{BGu4E{h^ zR^Mp#Iq5^oRE7?v%!( z2z=&#PIg>|xSf1}Mi9D;!3}P&99S6MBjR;BZTgJcedotTE1%sGB+|_tY~Kg$p2VV1 z(cE&A$%)}x&DFpA$brvv`v^;^{YcBOw&GcXU3egN-hw`4FuwMz)`CUwi_JQTcozxj zqs7k>*Kf2ABUqpV(9qipB&m2^Jv3K z744W>$sTEo$mUwtrN0OwT|Q|8EIVO;nS$;)PzRbqJYLmW8XM_iQ~X{;H8U|B$PkP*bXoIqm; z*cpi|aXc_`lSI?8kRGFwBK!ck+VOJOAtL1H+4`H7(~xZT*F%6f%r2L)fc7fDvA?l$ zA_gvE$2BxWzAKApd8a9hZB#^gl@y8DpWVU8%H*c;+EHq#lcwENi84EZghrW0(yjl| z-g|&GwXN&Iv3Ffml_DCNgrbyyR0|13nt>#AQK}>q=}1-A5+Rsiz|f0QQz#M)RY0Uy z1rmBuq<5qX>ObB4xcAz7yU)GPJ&fLcQj?kPIeRumeYaGWhPc_7_0VM57wbbfh%;ViNj0s{!v1~~cgn%c zYPk=X&V1^otv}mlVlI3>qg^7=sjT(tn@0+c4%JK9*k7ur?flcKqc6lhVMsQV_;*G;6(GHQy*2%`^%*24YdyZn^v=f#;fz1&~r*&>8KW{0jR zZV~xrTh03?bC*;1yvURmOyFgk0bnE{o0KN!kT&ZRtN__g74-uM{2AhrPT%|upT>5cYoSg$vk086v?B4`J}o8#A4XNz=>r}d&UuAgRl z6Zn-=-7j-g#^N={u_OeF4b^S#YB_=2lc9J*KKPe}1C;wTdbRL%a8rpXFRRs7E4vKg zp20%k5;?-uf7w*Yq}5GfPd$-=a%<{OyfvaFPl$|NpSa`dRhl$;To|18z;Vj@fmMni zqJ*C2>U!VBpyA2Rv%i0<|Gw|X87ZEWjV~)$+}Uf2VlHcq*(C9W$It0dC3C7jUTFZ+ z)(YJXzJm4)zxDnuJO}0V^)_DIJ|2AeKaN*k?X1K)2m#KLmY?^17Y>0Ae$GjZ0&L}d zR`_$0+1hAdL9m5M6VPSddWT3;4)GM1g-Fqzw|}3{KfY|7OP$THn~f`I=rUVlY+rf~ z0v$ZTEqY4&LAB)}eqJHtROo<_IH~fZ94W!=VTU!z(_Q`AN*21vOb(7s!j@3VFStyb zNwRibX{DrkA5s%}+$F4{6Wypk#W%Jg$kyx{@h~jUvf{PLC$+at8#d%jGZJwHy8jW( z!zg$?KzUgCzNup5^phfsBd5e(Fi&_Z>pUyzmPey{*o~HuH1dZDmen^Y_z>uKu1VbdLZ4PE=D_;+wXTvJtZ`Ayf_m zsdxaCI;tRFLL9}usc<9p?3;_!3Z^RPPI53RkSzOVI*)Pe(kX`&mKEmk@+aDy`rCbR z6RXC3zp8wpZe3g1F@EPWYVGOIn|@Zr&ld5sYy3Bk5xd@gQ+Qr4%n&o>Ae9s}^lbEX zFUb|;bfg7;85-W?XHPxHX8Z9A-TlvP9!XDmi%n4@}w!>0By|8Q+?4D#?L=A+@ zE{l7N13-P){=m>&1Bckbs7Mv|TusTtx#j#i8{&iI?PZOqZsc-l7Jr>r0^36tfYas| z3w%2Eq@mMHy-HJsi(FAwEz=fVrM&>tX{n`(fsUg=f>D<`cOClXBeHR~p|+rqlZV7n zl;<0OkSP{dLMrhwn<;DQ?!M6uh4gcup6pVQ$Lzg=57_(&mdG_<&~)fT!bZA$2PIdp zzd7old{w2*U9p*@K)sFHNKTg)ED&;P_41mln2ttGTGp!B5#BG`T&OrMr5JYk2;YXD zp~RC8kz`FP@N@@t9c5ATr_}1xj$Qr z2MXb1?>?`V`N{V>6FY)$1w7WdD7Ns$t)es2>O5EJ=}y{Q61jz|2IBZySh69Z^ZN+yQ0fFk&rZ{8$)7=s0+R7iCt8|#87IX zPTnu7`v@K;EDsV7QwN|b{6#z-*I%MMps=*-?LVaagB^4rUVFErXy8_VV8d?3{+1*S z?_~vwzu+D7x3;e0euu;~mG2}l9b9GoV(1E_^1T`#i=NV-cofBz|Ge;L_55rUKfA)u zk>cn0`2W(ZaQxdm2%;z7-Jhcdz}856UuqbOKHiyYUss5<=qfp)#|tKzH2G~BHV!$J z;WO+GLk*=rI$(QC`0DM<@0>usZ+`=6m~y~S!KRUrGc*3cU&bJnafEt0H>{Ccfb%CyOtYZz!nfe zHWg6U3oDf$^DqHS!X!&4$A)NLO4+hD8PynJvj8+aE1n^4r&$v&k*nil35HlI-0|(n z*QUG4KZ~dlb@r5=R=SY!pio-~)v{VXUuZ!Y4asFs^ag*T3PdG6^>Bz5(W7Om6%Bc(?5&YK7>sWAYw zdiO`R^G1R9l{DWmk0yojHSdzm=R)z!Qapz%!#rOni&X7)li3u+K+lba*~lLG{qpEX z+6WLx6i`td9WD>{I{i0kr_BL7!ij;+>s`|1Tw_J2(6CzFH*HoDJ+=Chg|gR-Zxol^ zT5M6v_?RJi#j?F*vd)0SkF}J-d#@IU((O}H#i%!^52B28`0};l;@1?p_>ym34KnJ9 z%a_>2+Y?5<4e8A!lF)XlerihNLXIRemN%M)aH-&37r4B6Bhbr!_(p6XR882Fu~-2MWGMHALovERN|F)Wad#*3C8F`vye2t z(SaH)3UMl|qP_#Oq@oHi@?9{TgQJk~N0FH|i?=d-98B8TguLeLmMg|2MqC0@GYg|h z{C$|4;Sg}HPpT=GQ(}CdP&h4*+h)rV7Q8MdDJy$Ff=z8UO%<%7lxOx_envsgB# z0?pu>5JWQ{j>7lIJqwbW5-vTVy+_sTjkpcfLi;O7jVDJp9J1u+!&SJbw>DVwsk>pP zqI^HE2j5WB^jTuOn*k?gw%K3aWwrSN()6U-hV=x4X6Jr}c)7V8WxQY{eMAaV5Vx16 z_;}*>%iv=*(@6%}f&d^wdC3QKIv!3hp;jtNC0--YZh`O9Q{$B+u4F8l3VCt@$RgC3 zk(8ZtI-XO4TuuaaL4${Ac<8lilYjXX`F(f!lgK~V z$^?N9OkJ!lTCf__`Yv3G-DVYTjLV+tbA|>rHxq6)D|KoxA0BEWNjbQqJQ7(*4Te%6V zgmLx+u>sz=<+ErdO*ORcY7u|8L-_kGGC%(jF5sS z=K5Kvt|E?#P5r0Q72!9<9DCwd*|SYaDwevVy3J!=YNZE?v&JMuM<-6!O!c2?(hj}M z%`@m1HjNS_WHQR=uW(FrFgVk0z=yQjfes)cZ}{4&U9@`iL8kFx`iXFafB`gj#bXw) z0aXbwD88p?%GfNC*2aiaMf&TEZ=yV7J!9>8)lUhiWQWVjC>g8fAid^FhxR1J*Gj9{ z+{k~aMh$TBP0Pwi4T;&GP87oO4!SdJu|a-r^m(1di?AKVecP3|8>|yT35wij3bwAs z!bn=RS&@}ysrH4UsnYp%WFkW<9J`>T`Y4Eh8|!S!edGnFugp!hiKi(D3}2DAowYd0 zg)&;PZ}_qguT_k9(db&L?kN>}KV8kePa~=E$tg!8^8pOTO*Vd^B9sOMJde5F?1fU6 zeAKfkf6?jrCkvaywbJ{r7xQi8R?kHW>*mr8c=Fubhg-Sp2X-jDQNM+S*mT{$mFKLX z81u2zq?a_TPaQ*3%}2BxtDOq>g?3n9@Sk~VEB$`OB^}$LQD%zjZiyZW!@A`^iG`zu zaUZxi8C)xDwpo9l55A#Fr2?;$CKcb$x^xK@j#&WVze5jad{fVqEms1-5g{G!%;Rk2=r=UtHdLWM#CAFDIa#(OApXfOC_} zPiFwoL2h=i1&6Tfk93EXIuvE{>VpSd+%n%A1PaDHuYgk`5Y0pj$_F=iQ7-vGKBn|m zhuTS2qf6Fflo1n>&QS}_T-8wJ2JGwJHfx_c+I216&r#g+b2XRA;MRPOUaej{$rN9q zm;hG2$#^k3=p)LT`Q9SC=sHN|=|9xie?FKTbL?Yp|3;s4X z$$$+tvy_@c`~|R+;g5dS_T~6P15+MJ23I4m@jPlop0FzWzQ^0n$;%MZ=*pchMcIrg z5=1Z9WTLkel^lzos~LPXyxI>);xY?gQ#h4OaB z(MA|-UqR~j`_7@&F3M!RS=oe!Bd$|xzk=+0y`=!J?3bE@R&oRO(*t@PGMY{wB_356 zOX^7VFVTB?cB}`QY-~5BT^fYkzdzxaw96*Y1 zlK=>t8(&1j0W=cjFU;4I0zRyWh!)E7XSJ(VHA}%OqQQN!7sE!rf+qF9f*9vZ_YJPv zd{~AAd<7Xq#w@8=eLgU}mU(Q%xAGH5<(#h6z5grEKc&o*ou#|F0b6{XXvK$*9_E6b zJH=>Xm5Qk?&;$hHj3z!w7&76gT_RaTI&5xoR6J1hi}2^xAU@`^J_t^$$cXuxBx!vc zGt}(*vga>xZFfEt-hn?|P+(gCd=g`*oqP1pE9NG@S*`K&o(Cv7?LE9Sn*a&CtTaIbDp1ar3!r>f@@_r}(wma=t_u^@ z%++ls+61j?&|Helg<}G@0i!+1_4BvZ=*~PBxG~6r%|44 zRB8!|T!f_OjlHuo{6}|OY2qv%x5?KfUB+rN2M5_7BR?S6Sjjni;zDbHC06s|vf`U3 zPm=mY4V#b&s5Y#J#w?jxc|6eQUawue>eEzbb#ezLY*5fP^1^78pcBDTQv|!o6I%SD zsK+ps3x zW_VRdhkHMXbm{O#6>@6o91a(>D)S&VB`nnFBG`L>y-YVM^`*(8^bn3Qn|Ma0LFcRC zNb4t{Uw*$zI*gjtWB|+ugI-vaPfl^~;fT0^H2sA&!UdtEsa;db+-brq+f$6@a<&JKrUI9kPFn0Qb`rJe6&ct5I?svUx5tMWlBuK4yQt zNLoO#XM0UQRWZ+^XqZ%D7FuML^fJNWbPdJrr7BUsPoa%v*F!8XFqIAV4IM*SMF@m> zM}JDlz~?qi zq`wpSQ(}yNUrUiySxXeBK@tI8pS`25Ov#!frql15Mc^*1of`Oinb5rNP*PqdT_bxm00 zl=jVxrmzV;A^<$-vJj}OWG<~rZF!6r1t8M*+dhkX?hySf>QVu-LL~cEB73u~L3cxs zH51iiCvxDZpc=-+YaE$H>Rn~a^>A8UgaO8y$FEB&RH9WLp)|{6OsR=375iusx7MVu z*Z6nLId{w(Jd9g@#2%e{bXZTNQ(k*&EXP{gki@1KPU1RM3o9#HQhlA4okQ-8yCrRF zD`TXUpXS&{IT9NeA2SkD>iSMT`jhr=GWD_+leV^@-QpJ6?vf<#rf^qIqmx}49S!;G z85&YnxSo--&p+!W_x6>VniL30+u~kS z9m-LQuHRKCCg|2EHyTGC4V%|`Wp2y}y zl*KmqME9X6*~PWA*s!FsfpAaMR@)WN?6jna00f{RAZYVYA7NgPYm+#D0nEkIyu`BF z_mNIuRVS=lF*jPy1Hpx`h=G~+=ftGONzeLO60lLNG>`ZG2vrN;FM_-K-dLyWc4CK! z44zfGa4vZ`G0b_*y}#zuzD7BGlmkYlHj`pFlj)!w&NDhRTDcGG`f)^*CtR`@_yQIO zdp>fCv^1%82bT^wCCit3$@r!5OsFDqFqSAE@R=5LM@|sa8o3aqH}g=Vhaa0Nm<+&I z`2pl4L3=Cr(R44eXJ&aiMTo#lM0|xU#?KKtyaWuH0H}c71?nsne^#;~o;M1!xg+Bh~kT){#>U`csSb z;#50w0ZUdZQDG4dkk1icay0A&=YibK1DXPrw5LU?Nsh}+O;@|@ov(~B63P`82J7e9 zTD%ORFLb@}=c&+lKNFtyAiHhK2J5pOhF);h z-&_7xPrlixR-;cFG8~4i-z|a93u`OunycKK3f{~pf=D)NyJo1X$PR0mj24bHjGDVt zK71vtdywgFz|Qc6s4AqKtg@rv{Kh**U7U)0+8Vy!;%f6De@XS0j{L{`Rf)0Q!#8EG5p)rZ>(?Jmr14#0qktY|d-I zo;27j;bzMsK584a@lfQDjj2-UerF%>g<1|d&xbzn0nqk_3pGn+I!p_NGU3i;v@&-~ zAO0207(N_qI?Xf|t?RF;J$x^%Z!>8xM;wE_$_H$Zzp%{}aBB%KA_{mXQ)Q*8QlR^iKbc+klqe5DaE-;Ua(@Wam8pqs|axj2^9%s(=xdQC%U zBF#J+>w<>Ly}nY*i2RvrpQGzp7ztLuL0o=cTP6P&jSr{L(OWjQHtGI6YqVacR`^i= zVyW-RME>0o5x3k-F>c%K8ZTNSwQL;L+sfK`3gJbOsjfhRllr)9@#fXA!e~Qs=C+ujl zNd8*Wgen_<5VsWvsxTblRB@)aUpB*p#PhfevN-JZkue{Twc8nX;lXi7GlfQ#{A%6_ zd}OYDs@2PtGIQ5+90+`R^BjTvfV}G2o+=Hn-Zl+ZqgMo;!2B``pMiYw`Q<7+mM+^b=hzk;(QA>#7~# zI^24ZY7rG6KA9g%b95!sHM9!xbAF#ua8+#2lmM>}0PC3E(le8E$Pj?Svvvvoa*f&g zkkw3wo_&mFwhFn4n@qE)bP>RFuqn>RWuRyXLmW&cq%^Q z#JJF$7F05=qLmRjQ|8ti5T}t_BaMl}q(^JZjKQ&Hk+S1y>tHK?u8W@{-Nx)H?j8-Q zc-GQKJsX+pEf`Ble>9)Fvf;Wk{NCoN@LAC5zjT#<`F9GE3I@LRj_F-zHuZR8x%|5t zd(&OVbC3qCYe#;y4{HkTwLx9qPf)LabBJeM&7`jj;3_4uRR$A3@+gW;Ne4i*UwlX- z_yX8TVjXgE%DpU$ME7}vLrY@TjzY1SLX#-;0a0|hDOcayiL&W9;$ai=S(xIG0>M3%#n?1Q5B-+@AXisu%FtjJYtQ_7${r#6`?p#i&a2 zO2eSBl6ao*$GV!4v7%FAwqi;Z1xG2(mPUHU2gS{$5@fWG+7+M-zk;B~%c6DUF)v-z zWA#3^{L%wY;q-FCn3bH>Ks&NP^RSuUVF(=pCDFU|ltfY)TwG2uD4*Ti5iW!ic8@eC zI%ftgEj*g6?fMe0_s^Biwh8L!@gKuz7Rga_(Qf8Yo;)Ta&-GyY(+&wv~>ZS zQ@b9l6g;Z`&A=+SaU@yL*lswYd-_v`2osHZ+p=-{&PiiVg#MFd-L6u!GOh?;ESXmW zIF3DQJ|)xSdz)gVQ6Oa6)k-whvlyk9NRUg6g61#ox*Srk{-t%~$$T0v(^TxelWKf4 zfRPeJ&cV9OO^>3=H_qf_KRgO>%LY=P5)M+mvchhqaK?={jA!S$r=g@qbppE;rxwk4 zKZaGu7zpsJeGZCmwlYl3n)&GCuUGi-Jr^@yQ%@&DQU!IiJ3+kt)OLwkSPAL^P^WuD zU#&H+Zjd;ko{u{^jb(tH>w-bMh85>*azfX--c0d(`FoVmsv|nY7ug}W$Rqn52ctD5 z+T8PFbTZKy^C8tXu|4vsVT?ne!H2`_>~=3RrW;u(wlGqVJ$k-8a_dRlZ9leWvPBE< z&CTHMlyi02*lGQ&>jt@?V{a-R|E(MDvib^|I2io7DtIB`*k5hb^MI|=2N%D*t6Xn= z*bzKpHPDvzu;l#GdO3)%9|Sr~0ifqn{JxBfAishd4a$RW3xjs(Z8-BzV;};0JgtaR zkMfX1<7U0a@9g#p=osips+^a8tdpS3rl72FD&y(iQoiGd?`sK#gd{7THm@7cXEQ4- zTxir;u(8E3<}{%JTv8#IfEg+$`_*DoFF;OoLWF26L+kg?$q5Q+*m3#xBSqV`7jm2P z-Bw^X0BYxp7S&(xx0@^NReYSc^PekP@y93C13VFg)pI+0YG<+i4h+5+I6Y%Mb4BJq zrt9y8-wBBYQ|>Lc)irW-v|)=OoZwzy)%s$jnqt<{FeBtxd*R%uGw2t2LL9?@;>4D| zU@hGtXgEE5uDB^Wna70ph@3M{WT?g3lzqnQGxEuf@DmN~2)ssWPFEu~FYfPk{MY9l zBwg_0H%gw4H?i|*=Na>7Lm@73zv5ZDQH&MiCOx?(bg)&}T3RBfd~V(94qkrG14E{! zs=R>S;r3ziULJ5pM_mJer>~d%TF8X75hydIc)g|}S`#v8Okse2<(4LuRXunq=Sov$(Tx_U5p-A8<6UewLlkIMVYp50Z8 zOtS~Ga?^}M@hFpakGvXu@loz3&wEeK%X1nlp1{+=B@%PPoC8i(PFTu$3mJl@wvM{N zp+TOSF&j3i!Ty-{C5Ob|y1imUJ%U(DUrrc8lE@`NesK5FnT(A4(UMBO34C`Fw{!Fw za#1L&R+L{9=yZJKfs{iTVFXVDrd{WFX;aMBERC56lJ-9d2CI@s;iZ=6?3QJKq8tfC z9|}RWO#!@UnWTa18||oI*}8YJHn+NnFU|`?nxZ7MYMPTID~2O^e=+A72V&4D=RL|^ zHYT<(Yp`N?Ep1UcXvc3A#yTSWS2y`S!#&dA7F~?iSZ-+NyJDxgW+*4Sf;g{({FJ>F zB*-*|qPkZ=`=Q3hq~k~ye!gwIt{+_55HlHSwzKA3=7UuPvs6BNiDA;+?+11E1k7|3 z(rhA|n2en2d$Ff+@yQS~-*;K~{AwOMEKfA-$~91(yuADvp4^pnU-)qYXs?uwrBf?5 z=k=8TNst)orYF?vfGSEzRu|tu02&4RdOpvMVvJGx0r*Z>+$_^&v<(+gM4Hd6;jSw@ zeC$wGQq<+kdVJYv+V!4xE{Oq3d)Xu5-hoqC>`i8eX}n`xXrVL9DJ3C>!q{2IrqN(+ z>&D=z14DE4_lNvqShXv|QyLmBzA9k5*|xmZcyBis=abd5%w%p=o)sdS(Uj;OQP5#q z8(Zr_jkNfe2*XL+zqVfBKhJ>X&e!>39Zu>;($CbLP zq1}wV+ZHXGlP$&cRyegjMA2s=6LX=Qjk}WuaSpLA2HY{*)I+8;3a z5lt~zW84`-r$YzhT0M&cWm#0|o9DChgyfE76XcD~QJCd}3*4Gz9I+NeIM{njg?yYTO^u|z9VClHN-UHy*!WRXv{mkRb;bB;WR3| z=m!?eR(vxUw^n$gE0`0QTGaEVho>*%fVt&a_p0kEv@j_1$YSrecOr4W(bHVG^Zq8! z@CfPRq}ONj&zehDQ&yC|D29)n!Bohuww7ouGB#urj?w!<+fqg=cARh zVDc9+qc0DwSd~oY6w0rj@}@?ODjRzMQu|cM_O&j6Lgrte&Fe6IWAF$rpN3`7TzDg# zqG5E?3oh@l!GFu0KrJNr?aZg5Pxyk>^DZGRJa7IrXSSbpr8bu>i1mrObc1Y`SSg7Dm$+gz5Op8-u9V4M>c?7=5+bXK}y%C?Id*E>csnm89T z5MuS$sAvxkm6tqqB7zBTcZA#p?KCs#dk#gBX^to zaQ-WB0>FR$4Ek9Ue`y^*+rCec>7Fwx|eYE$z#FQGj^kXy?B_h@8-fgJ8eFeI8=vv(`MYpq+Wf9 z4yJBwEEsmkk9rtzO5y1ZT@r+b8uxygP0^ZP_b07h@RVsH(;=?Nr6G6aI~JdmdPmVR zx27hQb-@X5JVz6QomnxXVJ==@YUmvwyQrwnFYe#B-!u8TCDH(v`=Gtx=(8k(?O}XFo>L4Qo#j6+DiAir zZXFHU@waL4oA5)=sNE|m@B7#D=F`6mPj!FqqWcdC{Gm_wRydu)>9#qE@r9S4szp=J z#q)ypILXK4Bj5&Px~+}_lF=|)eKU&N<@A_)QxErH+A@k-By|^x+K})fF^x*^*o2U# zAVzg~4b`ct=F+W-<(}JD(MorOOhuAS(RR_AK15Urg1u`Xv=H`x0u)11>~^ zI|eVDe&&&+c_>9(#GP?YPz_rlR<0-CZlnJ+n{Z+bw;Lx%jn}TQt|2t#4B*IR9ZkPw zc!EYb1hTJ|+7U|c=kDv0i8txj6q3tflUvH4C z4xu(JCaB2FwG5Vz=&_w0=95p`opQyt^&t-|JoeTO@?;E#C_ps*0s3;ftGUZi;*qI; zLXSQB`P;sGbM1e4s^1iz1YX7tRnZOa&of(;?*f?v^vzT6Pxm|GB6zuP#&KZsbbuBv zg6I;d&h2kT_c_VYl@ z-BX8yBcrj;9Sf5)+G-t>;Oculv%+O0a)}5d6hQl2G^Ufso0DUc4ZvgM?ToI}zZ!s! zJBc_F^`hQc>9<99QBEs4L10_;EIF{7Qte)Qk(gKWv;oOp9o35bX%D$wD^G$=T#! z7Y9sJj*-o%rj+TEJkXY}qh3bOBn0g9-Y+bKAjf3E-aE^ELnc_J)lVoADhOF5)UJ2qoaj6SX z6or%!)7ogaamLQgvHM6?+#`?iXqd)W1VoV>b6xy(_ppb;d#`YG!OZKeW?JSN70MSH z${MU|2&=Doov?@W9DW4W>Tfo2y?YbaLJo6l7=L)M7L#Jc0XZ=zsyb&Z82fpenggfj zWQVF-Mrd;d%APddWip{OIemx2tH|n2FfmAi>qa(C%dX4=x?sHE_+;+1Lrx+s z(!9()r|7t)fk}@kkM{1h@|E8W3ea>gKlQ849@$I}MO7 z#Yb}*_jX~4X5pSX!#)r1b>8gImfWKfMMG=m^HG^}$8ayj{=J zDA7Zr4qBqx=B{!dr!t2(R&?+ zll8Kx19)SGLjU_wgwe6=?wXmAmNBeF{H>P~VGicYCG@k6A=PQS#8@{11e*PQvy!&k z19TdzgV|31>(0{u@bw3$+hO>V$m&C;G=${GI)cW$0WUSSj4i+!mK?32KQ<2|U`dT5 zWzh{`;~A;_Aa%`aeN>YPYsDNtOSXY)IXIgOF6?-VtEI^?3a#3<8nlYh>q5t?a)0Hi z&Z0WYdAUiZ`k&R$zZYd-qrrsU$ z1?H=!5b{BKqFVe0Wga@+rO4F^fA2Yx63hF01=A1R_&GX)AG!`zmOlP2+&llrcPRK# z=bBjZ`U={NIr70NcPZli1VD?U{8HQP;K`H1&K4ijrdTD>A{mJ*7#HiZs>*urwk| zrC7LB;mO{Fuu@y%G87yxAa%f zi>#qadLetvLT7|Yc#1dXCCNMv0$6*b+6@K{X)-zNZ+lmSwZE-rZ?9BQx|&TN+G^*L zbsZk6_`I#V*qZ$Md`YyE+Wq~a-T@u?4841urmVLu>++-mMe*Zu-fD4O~* zvo#4@BZHz%bNstcv3NVa+x4nOhWpuVvGKLIO?Cyz%1SylCkJ4W5}O4qN;;;L$~eA^ z6HR)i%?C*UBU0!DtlN}8q&Ne{VY{+w*3=KwjN{D4yLBXPuX%d79Srf2!jZ|{sgkT5 z)H2=b{)zWnC-1*sT|#%%TlB?}=CLWE%yOw!cwl=6M9L0ORJtPJ*LN3ZWWj##s_~z@ zY5d*i3k3gB1N?J_{Rnj#1TxV6!e8n4W%|;0VfU+lglPM77WR9te*iEC0`2rOSeye) zpAEkY*F=6#|M&ggKkM;7AN|=48}M*^vmLxN;1d1MsmS^9i}~?q&NsBU@?)3Sran7( z@dTR=A^~calrA6CPx)s({A>e1+rYnT1H11Ydiw7s!XHj5KOU6+=%L3i{j-Mbdyapo zDf=Gz=Q{osCG7`!{^2t42iN@xf-L{t3g(Bafj>ckevrk|f45xu@zno=6#n=@J3Rm0 zH^-0H?|=Lf{UC=s|1Ffkk5y1VNaBwl1b}`1(^k>-ck$1YoKE2SJJc zp!NNnB!5sTf83y-lO$l0=f0#lb#dw3yot8oANNiDFLL&ClKfY@ivLBG{XwG-J*}55 zIZi#?HhP^5w>|8kO!Rx&G7q1=``<4=i@ZHt{6B0&2Y@?n3FS~83ea3c&GlcP5S_K0 z$FQa(&v{x2%J^l4aMLGwqk40Gwf2#=yv$55{b(A0j62nS-najrqh#OCIlK(tUP-1%zTK7hD|WHhtUEiO zE}XPjvfyn&4y6)?v6(Y2?>*%=p#IXjQt^dCFx%O-P(pddp`~SmJ)Ba%N08XVzd3AQ z;@@0Ftq>l$poRs=b}DZ}7Dj^^8ecTGkS`B8URB-{m_t+&zp&2jusi$rm_1L@z6J6E zv4)G>hJiaJMIBz3aVnp`N$a3pzq|)*nF$+II4H4%~Fw zL4M*gGwF5vlNdYRCQ7JXP>hls#*5xG>7tpD6BT;dx3&-84v?Y7uvd2qwZ!G3mF142 z>vHbRwdCqgGf?KvTMI5{pB_RD$VURBxxKmwxV{kqE^n`*Mij)n1T2J%uTN9z>UBc2 zrf&7nCFb2NxjHp7$F}dv3Q7LntaJyT02J^#9xeuHxo?>Y!@QV;`;NV~*Jn=5nAZVr zV^$BR@AA}BuNLwenN2WNF(O~)MN67iQF?&aGy+#4a0eY<>h;zXl0gtr>NS#ZL75B` zm9dP1R?Yk0?MQdV@?YDaPpd(_z^ZR-Cv*G}<_XpAy+Q6l8Mh#q{`q{YRHQqv~c(OPQZ4@~9ad~_<-&GUZsNzGk;5&7)#q`a4gnu8;Q zeHu3d>0A2<2VJd>>C+z9br-2eKh7t!&;XJ0R(4r&e_-CGMO}1ielhxN0kf&~LLvbh zOK5~psi_cG%dVv*kS`byx6{wgiOxi4M`(acQTSHfL_}#0Yr^C(C;}w{rTLvr}6b!K}Mv zI>K^Ukrpsj#cPY&dL_X=o@stLqKucnZJ>rN3b{#6VpaZXIL!Zwiw$WYG)S#b#PAAnA>f>*iCtqBF`BYo zERQ_SQkRdCM%8>57%*Z*!4*9vLTd+Ch@waiFXr7`{un*I zD8M<4t)I0tk6QX9zA5r?pN>>2Is=v)QzXH2r&|Pua;6Ur9WT!X-RrpfkA#i?#Z~sM z2`GtlAe_apr!Po}f_(Rmg`#^)A6-4*Xq`=oyAhdbLOdzXzw9yw*W)yIdpEj;lW7gjg`(G5!yVxq zXimQpeo_+v|9WXfXKWzcu4o7Z3=0Ov_un0Jh8t$6r^qg|l%UAB#D;D)m2g|6I)5BR zyTgy_2uawz(os%qMhP{w0D{&(LsNopX171Kc`7jF7rr(2sQy^Vgfg%ekA&rJ~J!Zx7e(v@I^LO>eKp z*fKkj*1emkuI;F>?)=fyF zBtNtFycMaL%&jf*q{EcrH8ejLA4+)_3J~4E#M@huu^Ljn)6*<#4X7O|M#-hTy|9I4 zb)V`wvLk@qucVI;Zky+>z*bxK2G7%Npd1M;+{!3g_^5OwhZgsu2iG)VRH0B!G&dQw z$;FY!bjdlEO>u_rxNYKLAF)&7Gmt{Hid#Z&BqE{9TBL(3*5XFv!+x$XgHu9CMo&TE ovs`jgyd&~So()D|WTiCCNe3jhEB literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-source-map.json b/docs/migration/evidence/slice-10/frontend-source-map.json new file mode 100644 index 0000000..262782e --- /dev/null +++ b/docs/migration/evidence/slice-10/frontend-source-map.json @@ -0,0 +1,190 @@ +{ + "source": "static/app.js", + "source_sha256": "c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6", + "source_line_count": 9283, + "reassembled_sha256": "c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6", + "all_source_lines_preserved": true, + "core": { + "target": "app/frontend/app.js", + "ranges": [ + { + "start": 1, + "end": 1206 + }, + { + "start": 3471, + "end": 3489 + }, + { + "start": 8427, + "end": 8904 + }, + { + "start": 9052, + "end": 9283 + } + ] + }, + "modules": [ + { + "target": "app/frontend/pages/sentiment/page.js", + "ranges": [ + { + "start": 1207, + "end": 1516, + "sha256": "70a884362b3f97ceb28e2f3a83a70ce26e61c79e23bfeee62b301b9068f2b69c" + } + ] + }, + { + "target": "app/frontend/pages/pools/page.js", + "ranges": [ + { + "start": 1517, + "end": 1915, + "sha256": "ff8623609c1ef6eb793deaef2b627746727a4768962711d1712e35833b4f58c3" + } + ] + }, + { + "target": "app/frontend/pages/market/runtime.js", + "ranges": [ + { + "start": 1916, + "end": 1957, + "sha256": "703dafd0417926df8572a885ffa32a79ee16346019f0e14fcee9e03ad1f1baf7" + }, + { + "start": 6893, + "end": 7719, + "sha256": "a670986ac2099a181f5f348cd48bc4777da0d4709b3ac79239067ff5666261fb" + }, + { + "start": 7969, + "end": 8426, + "sha256": "467409c2cfc06ee96bb7f422be55f79920c3a9936229b2234dd8f78b537e7f26" + } + ] + }, + { + "target": "app/frontend/pages/rotation/page.js", + "ranges": [ + { + "start": 1958, + "end": 2124, + "sha256": "33f536213db33be0934527f13527712a9d521b5f89a5784b42887c5bf8631f2f" + } + ] + }, + { + "target": "app/frontend/pages/ladder/page.js", + "ranges": [ + { + "start": 2125, + "end": 2216, + "sha256": "2be84071921910acbec2328f1f10dd8565420ea03a1930ff255040bf99d679a8" + } + ] + }, + { + "target": "app/frontend/pages/auction/page.js", + "ranges": [ + { + "start": 2217, + "end": 2481, + "sha256": "7f16901ae8769b9570693211022538feb02f2cda4bffe6fa95ba6ce60c10b012" + } + ] + }, + { + "target": "app/frontend/pages/themes/page.js", + "ranges": [ + { + "start": 2482, + "end": 2583, + "sha256": "c134d762bda669483f0c094efae9281919b68b2ffb83c9457670bc9013ce1515" + } + ] + }, + { + "target": "app/frontend/pages/popularity/page.js", + "ranges": [ + { + "start": 2584, + "end": 2659, + "sha256": "db72e42385e4a4bd4314ab471b27c1bb804f13650ee463f0843d783b0ba50bff" + } + ] + }, + { + "target": "app/frontend/pages/dragon-tiger/page.js", + "ranges": [ + { + "start": 2660, + "end": 3028, + "sha256": "b33ccad80ce997bddd75e4025eec35aa246fa5e9f5ca9ccd5f17e587885274cd" + } + ] + }, + { + "target": "app/frontend/pages/review/page.js", + "ranges": [ + { + "start": 3029, + "end": 3470, + "sha256": "10dba1966b32941cb28ac46d1cb1b20ae74ea271fd7be22a23b46d290ece80ef" + }, + { + "start": 7720, + "end": 7968, + "sha256": "3af64079f997fabbf0ff4023088eb62f94c0091a823bd6d65c1f9e485d1c5ad8" + } + ] + }, + { + "target": "app/frontend/pages/screener/page.js", + "ranges": [ + { + "start": 3490, + "end": 4336, + "sha256": "76dfdd5610453f0abb5899baba9d751b5f597450ec656bf10580ce91447a68b9" + }, + { + "start": 6668, + "end": 6892, + "sha256": "a7d0fa98b07516169a8e46c2ae2f6efbaeab651887c479919210835f0877533e" + } + ] + }, + { + "target": "app/frontend/pages/mentor/page.js", + "ranges": [ + { + "start": 4337, + "end": 4827, + "sha256": "b2067c062fb6cb539dd6402074d02f1ae65903957106d7ebf8d63bc5487f244c" + } + ] + }, + { + "target": "app/frontend/pages/heaven/page.js", + "ranges": [ + { + "start": 4828, + "end": 6667, + "sha256": "57bd47c239c4ee9302c7cd7a1f86a5d0932df6065148a34bafe0c49bef644cb1" + } + ] + }, + { + "target": "app/frontend/shared/export.js", + "ranges": [ + { + "start": 8905, + "end": 9051, + "sha256": "17b867189087615a4414da4f9db3862306e05cb527c25c794beb9c4c74b583ab" + } + ] + } + ] +} diff --git a/docs/migration/evidence/slice-11/README.md b/docs/migration/evidence/slice-11/README.md new file mode 100644 index 0000000..f4bd0e4 --- /dev/null +++ b/docs/migration/evidence/slice-11/README.md @@ -0,0 +1,108 @@ +# 切片 11:不确定代码审计、全量验收与交接准备 + +> 基线:`dec3cd12365df5e7d4c391369f14c457cf56d7d9` +> 候选回档标签:`xiaobai-preservation-slice-11-candidate-20260731` +> 严格审计候选标签:`xiaobai-preservation-slice-11-audit-candidate-20260731` +> 跨日复验候选标签:`xiaobai-preservation-slice-11-audit-candidate-20260801` +> 独立维护候选标签:`xiaobai-preservation-slice-11-audit-candidate-standalone-20260801` +> 最终完成标签:`xiaobai-preservation-complete-20260801` +> 当前结论:自动与用户人工验收均已完成;本地迁移交付完成,尚未执行正式切换、Docker或NAS部署 + +## 1. 本切片做了什么 + +本切片不增加功能、不调整视觉,也不继续拆分业务代码。它逐项审计切片10保留的待定资产, +把有完整证据的无效实现放入可单独回档的试删候选,并为人工接管和后续切换准备文档。 + +经试删和人工验收后确认废弃: + +- `app/demo_data.py`:没有运行导入、动态注册、数据库或配置责任的旧演示数据构造器。 +- `app/frontend/heaven-loading.js`:页面未加载的旧问天动画;正式入口继续使用 + `frontend/pages/heaven/loading-v2.js`。 +- 五个只有定义、没有消费者的前端函数:`commonReviewColumns`、`outcomeClass`、 + `screenerResultMatchesSelection`、`selectRegime`、`showHeartRitualCurtain`。 + +明确保留: + +- `wencai_saved_queries`表及三个Repository方法。它们承担历史数据库兼容和用户隔离责任, + 当前库为空不能证明其他部署库也为空。 +- 与试删函数相邻但证据不足的DOM、状态字段和CSS。没有为追求行数继续连带删除。 + +逐项指纹、引用扫描、责任判断和恢复位置见`uncertain-code-audit.md`。 + +## 2. 自动验证结果 + +| 验证 | 结果 | +|---|---:| +| 原版`python -m unittest discover -s tests -q` | 231项通过 | +| 迁移版`python -m unittest discover -s tests -q` | 305项通过 | +| 历史切片与前端/清理专项复核 | 通过 | +| 迁移版JavaScript语法检查 | 24个文件通过 | +| `npx.cmd playwright test --reporter=dot` | 45项通过(1.6分钟) | +| 固定只读API差分 | 21个端点全部一致 | +| 数据库差分 | 62个schema对象、21张关键表全部一致 | +| `git diff --check` | 通过 | + +2026-08-01 01:19(Asia/Shanghai)跨日复验时,原版与迁移版共用的实时详情测试暴露出 +测试夹具依赖运行日的问题:夹具在周六动态生成“今日”,而业务正确拒绝在非交易日合并实时 +行情。两版测试夹具同步固定到明确的工作日盘中/盘前时点,产品代码与行情日期规则未改。 +修复后统一验收命令再次通过302项测试、24个JavaScript文件、SQLite完整性和45项Playwright +(2.0分钟)。 + +早期切片的五个前端源码测试原本要求与未试删的`static/app.js`逐字符一致。本切片验收时曾通过 +行号回放机制限制未登记改动。完成全站人工验收及前端所有权治理后,该过渡机制已退役;当前由 +运行时注册表、唯一所有者、DOM/API契约、JavaScript语法检查和Playwright行为回归持续守门。 + +完整API和数据库结果分别见`api-diff.json`与`database-diff.json`,二者`all_equal`均为`true`。 + +严格完成审计另外验证了候选维护工具本身:API注册表和候选架构清单均可生成并执行 +`--check`;24个前端脚本全部由统一命令发现;迁移期写入工具必须显式指定输出或`--apply`。 +Windows下Playwright托管Python静态服务器会在45项执行后不退出,统一验证器现改为显式启动、 +探活和停止8876;最终同一命令正常退出并明确报告`45 passed`。四项维护工具契约测试使迁移版 +总数从298增加到302。逐项目标矩阵见`completion-audit.md`。 + +后续独立性审计把仅含`app/`的Git导出放到系统临时目录:运行模块全部解析到导出内部,统一 +维护命令通过242项候选自有测试、两个注册表、24个JavaScript文件和SQLite完整性检查,并明确 +跳过不存在的Git工作区。正式仓库继续执行全部保真差分,最终为305项Python测试和45项 +Playwright通过。架构热点字节数已改为换行归一化后的UTF-8大小,Windows CRLF与Git/Linux LF +不会再制造假差异。 + +## 3. 真实浏览器验收 + +- 桌面端复核情绪周期、智能选股三个工作区、问天日间/夜间和加载资源;控制台无新增 + error或warn,页面无横向溢出。 +- 问天只加载`/pages/heaven/loading-v2.js`,未请求已试删的`/heaven-loading.js`。 +- 观势、观气、观心星空与八卦节点、原动画名称和可见行为保持不变。 +- `390x844`逐一点击涨停池、智能选股、问师、问天、我的复盘五个移动入口;底部导航固定, + 页面均可完整纵向滚动且没有文档级横向溢出。 +- 观势、观气、观心三页均复核;观气滚动到底后“个人合参”和“五行对应行业”可达。 +- 同账号、同数据库快照、同主题和同视口下,原版与迁移版问天布局和计算样式一致。 + +机器可读记录见`browser-acceptance.json`。截图和更广的桌面/移动基线继续沿用切片10证据目录。 +切片10截图的事后像素复核见`screenshot-pixel-audit.json`;九组有效截图平均色差低于0.3/255, +集合竞价候选图因登录状态失效被明确排除,未作为自动截图证据。2026-08-01用户随后在`8797` +真实登录状态下逐页检查全部页面并测试全部功能,确认视觉与功能迁移成功;所见问题几乎都 +属于原版遗留问题,未发现阻止验收的迁移回归。完整人工结论见`manual-acceptance.md`。 + +## 4. 数据与部署边界 + +- API/数据库比较使用两个隔离副本:`slice11-final-original`与`slice11-final-migrated`。 +- 没有写入根目录正式`data/review.db`,没有修改`.env`或私有Skill。 +- 没有占用`8765`,没有执行Docker构建、NAS测试或服务器切换。 +- `app/`已经完成本地迁移验收;原版根目录仍是当前部署基线和切换前回档来源。 +- `next/`保持冻结,没有作为代码、样式、测试或文档来源。 + +## 5. 回档与最终确认 + +2026-08-01用户完成全部页面和功能人工验收,确认迁移在视觉和功能上成功,并确认人工检查中 +发现的问题几乎都属于原版遗留问题。切片11的2个文件和5个无消费者函数据此从“候选试删”改为 +“确认废弃”;恢复标签继续保留作历史兼容应急,不代表删除结论仍待裁决。 + +本地迁移收尾已执行: + +1. 试删候选状态改为“确认废弃”。 +2. 建立最终完成标签并推送Gitea。 +3. `app/`作为后续结构治理的唯一开发目录。 + +正式数据库、原版部署、Docker和NAS仍未切换;切换时间与根目录清理必须由用户另行批准。 + +人工维护、验证、切换和回退步骤见`docs/migration/人工维护与本地切换指南.md`。 diff --git a/docs/migration/evidence/slice-11/api-diff.json b/docs/migration/evidence/slice-11/api-diff.json new file mode 100644 index 0000000..9115b6e --- /dev/null +++ b/docs/migration/evidence/slice-11/api-diff.json @@ -0,0 +1,236 @@ +{ + "all_equal": true, + "endpoints": [ + { + "name": "当前账号", + "method": "GET", + "endpoint": "/api/auth/me", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "33e0c08463d5f14a142840f894d92985135c6ce2bee22c93c4dde34dc433cf5b", + "migrated_sha256": "33e0c08463d5f14a142840f894d92985135c6ce2bee22c93c4dde34dc433cf5b", + "equal": true, + "first_difference": null + }, + { + "name": "账号状态", + "method": "GET", + "endpoint": "/api/account/status", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "0ac1b88affa62671f14ba9ea0bd42155952fdc2e03dba3573c232bb452733bc6", + "migrated_sha256": "0ac1b88affa62671f14ba9ea0bd42155952fdc2e03dba3573c232bb452733bc6", + "equal": true, + "first_difference": null + }, + { + "name": "全市场总览", + "method": "GET", + "endpoint": "/api/dashboard?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "565730fb75cec6f6758321074dfeba7bff19db6611476d511f9bc7257a5870f5", + "migrated_sha256": "565730fb75cec6f6758321074dfeba7bff19db6611476d511f9bc7257a5870f5", + "equal": true, + "first_difference": null + }, + { + "name": "情绪周期历史", + "method": "GET", + "endpoint": "/api/sentiment/history?trade_date=2026-07-30&limit=9", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "1a577fb859a2fd06749169e1d0f08f78b51c5217b55506c7903487a956b6192b", + "migrated_sha256": "1a577fb859a2fd06749169e1d0f08f78b51c5217b55506c7903487a956b6192b", + "equal": true, + "first_difference": null + }, + { + "name": "板块轮动历史", + "method": "GET", + "endpoint": "/api/rotation/history?trade_date=2026-07-30&limit=9", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eaf3ac41f479c0f57f161546f197c1321721b4a8390486a916232fe6ea1d3d37", + "migrated_sha256": "eaf3ac41f479c0f57f161546f197c1321721b4a8390486a916232fe6ea1d3d37", + "equal": true, + "first_difference": null + }, + { + "name": "集合竞价", + "method": "GET", + "endpoint": "/api/auction?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "bd75b100485c0afa0cdddc73d1880160eea8c0b8c91f556245c665d591285ed6", + "migrated_sha256": "bd75b100485c0afa0cdddc73d1880160eea8c0b8c91f556245c665d591285ed6", + "equal": true, + "first_difference": null + }, + { + "name": "题材库", + "method": "GET", + "endpoint": "/api/themes?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "f45e218d9bff5191445fe45b03fc62f3d9c440b8353404ae4b54901c20929552", + "migrated_sha256": "f45e218d9bff5191445fe45b03fc62f3d9c440b8353404ae4b54901c20929552", + "equal": true, + "first_difference": null + }, + { + "name": "人气热榜", + "method": "GET", + "endpoint": "/api/popularity?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "69987a80f02ac02bf9ff49b3a0a99782385f1933c643c9e3dbb5a75a1e20dd29", + "migrated_sha256": "69987a80f02ac02bf9ff49b3a0a99782385f1933c643c9e3dbb5a75a1e20dd29", + "equal": true, + "first_difference": null + }, + { + "name": "龙虎榜", + "method": "GET", + "endpoint": "/api/dragon-tiger?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "1d6936e33aea2bb4258d1d4d007385626d0c638fc290b66271f00649dba59358", + "migrated_sha256": "1d6936e33aea2bb4258d1d4d007385626d0c638fc290b66271f00649dba59358", + "equal": true, + "first_difference": null + }, + { + "name": "游资档案", + "method": "GET", + "endpoint": "/api/dragon-tiger/profiles", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "dfb1e534c018ec12fd8d8ee0e7fe0f234e73dc7715d7f0a948f74ef8d12d779a", + "migrated_sha256": "dfb1e534c018ec12fd8d8ee0e7fe0f234e73dc7715d7f0a948f74ef8d12d779a", + "equal": true, + "first_difference": null + }, + { + "name": "智能选股工作区", + "method": "GET", + "endpoint": "/api/screener/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "e33a10e94accda4948c2af53887ea97736697f588ee1a92f561aa5c4bb28c2fd", + "migrated_sha256": "e33a10e94accda4948c2af53887ea97736697f588ee1a92f561aa5c4bb28c2fd", + "equal": true, + "first_difference": null + }, + { + "name": "策略持续跟踪", + "method": "GET", + "endpoint": "/api/screener/tracking?limit=12", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "f4476f53152b6a2ce01f2918da5999246cfd0ad7d0b71e80fdea8fa59c7456c2", + "migrated_sha256": "f4476f53152b6a2ce01f2918da5999246cfd0ad7d0b71e80fdea8fa59c7456c2", + "equal": true, + "first_difference": null + }, + { + "name": "问师模型库", + "method": "GET", + "endpoint": "/api/mentors/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "0ff7794fe45f49ab980221fa855b64c70d5c9b83c78ef86edc041e713490b626", + "migrated_sha256": "0ff7794fe45f49ab980221fa855b64c70d5c9b83c78ef86edc041e713490b626", + "equal": true, + "first_difference": null + }, + { + "name": "问师历史", + "method": "GET", + "endpoint": "/api/mentors/messages?mentor_id=kobe92-perspective&trade_date=20260730", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "migrated_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "equal": true, + "first_difference": null + }, + { + "name": "问天初始化", + "method": "GET", + "endpoint": "/api/heaven/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "c814c2004c7dd672c397887725af000c150693a50900bb0ce1aa94599af1a3c8", + "migrated_sha256": "c814c2004c7dd672c397887725af000c150693a50900bb0ce1aa94599af1a3c8", + "equal": true, + "first_difference": null + }, + { + "name": "问天历史", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=trend&limit=20", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "2aa83ea177bd5cb2351ac4f3a60fdcd17e02cfc14b5753e157e515f03fc2c6c1", + "migrated_sha256": "2aa83ea177bd5cb2351ac4f3a60fdcd17e02cfc14b5753e157e515f03fc2c6c1", + "equal": true, + "first_difference": null + }, + { + "name": "自选追踪", + "method": "GET", + "endpoint": "/api/watchlist?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "29c001cc6859312fd90082d0fb83818d263827e28ec21157b94c415b71c45078", + "migrated_sha256": "29c001cc6859312fd90082d0fb83818d263827e28ec21157b94c415b71c45078", + "equal": true, + "first_difference": null + }, + { + "name": "全部复盘笔记", + "method": "GET", + "endpoint": "/api/notes?scope=all", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "a2a1f08610d017de0e46080a1268f72b734eeb80f9cada311d7e03eb1416656a", + "migrated_sha256": "a2a1f08610d017de0e46080a1268f72b734eeb80f9cada311d7e03eb1416656a", + "equal": true, + "first_difference": null + }, + { + "name": "交易日志", + "method": "GET", + "endpoint": "/api/trades?end_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "77287b34046e22748e94e61ead841e157f6b63f08de1b2fe61f5d715b2e989a4", + "migrated_sha256": "77287b34046e22748e94e61ead841e157f6b63f08de1b2fe61f5d715b2e989a4", + "equal": true, + "first_difference": null + }, + { + "name": "提醒中心", + "method": "GET", + "endpoint": "/api/alerts?status=all&as_of=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "b611e936ada5d547c728e33e811630282d1eecd7c1ab1517e22b34902eda032a", + "migrated_sha256": "b611e936ada5d547c728e33e811630282d1eecd7c1ab1517e22b34902eda032a", + "equal": true, + "first_difference": null + }, + { + "name": "复盘助手历史", + "method": "GET", + "endpoint": "/api/assistant/messages", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "migrated_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "equal": true, + "first_difference": null + } + ] +} diff --git a/docs/migration/evidence/slice-11/browser-acceptance.json b/docs/migration/evidence/slice-11/browser-acceptance.json new file mode 100644 index 0000000..dbb6858 --- /dev/null +++ b/docs/migration/evidence/slice-11/browser-acceptance.json @@ -0,0 +1,101 @@ +{ + "schema_version": 1, + "tested_at": "2026-07-31T16:10:00+08:00", + "runtime": { + "url": "http://127.0.0.1:8797/", + "root": "app", + "database": "app/data/backups/slice11-final-migrated/review.db", + "production_data_modified": false + }, + "overall": true, + "desktop": { + "checked": true, + "views": [ + "sentimentCycleView", + "screenerView", + "heavenView" + ], + "themes": [ + "light", + "dark" + ], + "console_errors": 0, + "console_warnings": 0, + "horizontal_overflow": false + }, + "mobile": { + "viewport": [ + 390, + 844 + ], + "fixed_navigation": { + "selector": ".module-nav", + "position": "fixed", + "height": 58, + "bottom_offset": 0, + "primary_tab_count": 5 + }, + "views": [ + { + "id": "limitPool", + "document_height": 1607, + "horizontal_overflow": false, + "vertical_content_reachable": true + }, + { + "id": "screenerView", + "document_height": 1555, + "horizontal_overflow": false, + "vertical_content_reachable": true + }, + { + "id": "mentorView", + "document_height": 961, + "horizontal_overflow": false, + "vertical_content_reachable": true + }, + { + "id": "heavenView", + "document_height": 844, + "horizontal_overflow": false, + "vertical_content_reachable": true + }, + { + "id": "reviewWorkspaceView", + "document_height": 1475, + "horizontal_overflow": false, + "vertical_content_reachable": true + } + ], + "heaven_panels": [ + { + "id": "trend", + "document_height": 844, + "vertical_content_reachable": true + }, + { + "id": "fortune", + "document_height": 1730, + "vertical_content_reachable": true, + "bottom_content_checked": "五行对应行业" + }, + { + "id": "heart", + "document_height": 1156, + "vertical_content_reachable": true + } + ] + }, + "preservation_comparison": { + "same_account": true, + "same_database_snapshot": true, + "same_theme": "dark", + "same_mobile_viewport": [ + 390, + 844 + ], + "original_and_migrated_layout_equal": true, + "theme_toggle_icon_note": "原版和迁移版都保留切换后图标需重载才同步的既有行为;相同加载序列下结果一致。" + }, + "manual_acceptance_required": true +} diff --git a/docs/migration/evidence/slice-11/completion-audit.md b/docs/migration/evidence/slice-11/completion-audit.md new file mode 100644 index 0000000..4af53cb --- /dev/null +++ b/docs/migration/evidence/slice-11/completion-audit.md @@ -0,0 +1,83 @@ +# 保真迁移完成度逐项审计 + +> 审计对象:`webapp/app/` +> 审计基线:`xiaobai-preservation-slice-11-candidate-20260731` +> 结论口径:自动证据通过不替代用户人工验收,也不授权部署切换 + +本审计回答的不是“测试是否为绿色”,而是迁移总纲、批准目录、产品表面和人工维护目标是否 +分别有可复验的证据。状态只使用:`自动闭环`、`人工闭环`、`明确保留`和`未执行`。 + +## 1. 目标与证据矩阵 + +| 要求 | 当前实现 | 主要证据 | 状态 | +|---|---|---|---| +| 原版是唯一产品/视觉基线 | 所有切片从根目录原版复制或机械移动;规格书不覆盖真实行为 | 总纲;切片00-11源码映射 | 自动闭环 | +| `next/`完全隔离 | `next/`未进入候选导入、资产、测试或部署路径;切片10后Git差分为0 | `next失败冻结记录.md`;Git路径审计 | 自动闭环 | +| 批准的模块化单体目录 | `backend/{bootstrap,http,features,data,database,jobs,llm}`、`frontend/{shared,pages,styles,vendor}`、`config/data/tests/tools`均已归位 | `app/config/architecture-inventory.json`;切片01-10 | 自动闭环 | +| 不制造第二套产品实现 | 根入口是兼容外壳;业务方法从原类机械移动,专项测试逐符号比较AST/哈希 | 切片01-10 preservation tests | 自动闭环 | +| 16个主工作区及内部能力完整 | 页面注册表有16个主工作区;策略跟踪、搜索、详情、提醒、账户和系统管理保留 | `pages.config.json`;前端边界测试;Playwright | 自动闭环 | +| API路径、权限、错误语义不变 | 53个精确路径和11个正则路径有唯一所有者;鉴权在后端执行 | `api.config.json`;HTTP/权限测试;21端点差分 | 自动闭环 | +| 数据源有统一边界和质量规则 | 18个数据集登记来源、用途、单位、新鲜度、覆盖率、复权和失败关闭规则 | data registries;DataGateway/quality tests | 自动闭环 | +| 数据库无损、用户隔离不变 | 36张表由初始schema和有序migration管理;62个schema对象、21张关键表差分相同 | 数据库差分;migration/repository/account-boundary tests | 自动闭环 | +| 后台任务可追踪和重试 | 3个任务登记调度、锁、超时、重试和输出版本;运行状态持久化 | `jobs.config.json`;job runner tests | 自动闭环 | +| LLM唯一治理边界 | 问师、问天、复盘助手和策略编译经统一网关执行会员、额度、模型回退、流式和审计规则 | 切片07/09;LLM gateway/stream tests | 自动闭环 | +| 前端唯一请求出口、Shell和页面职责 | 只有`frontend/shared/api.js`调用业务数据`fetch`;Shell、状态、弹窗、页面生命周期及页面模块已归位 | frontend boundary tests;运行时注册表;Playwright | 自动闭环 | +| CSS、主题、动画和移动行为不改写 | 原七层CSS和问天动画按字节/源码移动;令牌层与加载顺序受测试保护;用户逐页确认无迁移视觉回归 | CSS governance;切片10/11浏览器证据;`manual-acceptance.md` | 人工闭环 | +| 不确定代码先记录再试删 | 2个文件和5个无消费者函数经自动与人工验收确认废弃;历史表兼容责任继续保留 | `uncertain-code-audit.md`;cleanup contract;`manual-acceptance.md` | 人工闭环 | +| 可由人工维护者复验 | 候选README/架构说明、工具分类、API/架构生成器、统一验证命令均可从`app/`独立运行;系统临时目录导出实测242项候选测试通过 | `app/tools/README.md`;maintenance tool tests;独立导出复验 | 自动闭环 | +| 正式数据库与部署不受影响 | 验收只使用隔离SQLite副本和非8765端口 | 各切片README;运行记录 | 自动闭环 | +| Docker/NAS和正式入口切换 | 用户已明确本轮不做NAS Docker测试;人工验收前禁止切换 | 迁移状态和切换指南 | 未执行 | + +## 2. 结构减法的可量化结果 + +- 根`server.py`从原版约5,851行降为25行稳定入口;实现归入启动、HTTP和产品领域模块。 +- 根`database.py`从原版2,839行降为746行,只保留初始schema、组合入口及有明确历史兼容责任的 + 方法;各领域查询已移入对应Repository。 +- 20个其他根Python兼容模块均为1-15行导出/模块别名,不含第二套实现。 +- 原9,283行前端运行时按原连续源码范围拆入共享层和13个页面目录;该行号映射作为迁移历史 + 证据保留,日常维护改由当前模块所有权和行为回归约束。 +- 已确认没有消费者的`demo_data.py`、旧问天加载文件和5个函数进入可单项恢复的试删候选; + `wencai_saved_queries`因旧数据库兼容和账号隔离继续保留。 + +大文件不等于自动可删。筛选引擎、Tushare适配器、问天确定性计算和原CSS仍是单一有效实现; +在没有更细的同输入差分与人工视觉确认前继续拆分,反而违反“整理原件而非重拍”的迁移约束。 +它们已登记在`config/architecture-inventory.json`的`code_hotspots`,供后续正常维护按领域处理。 + +## 3. 本次严格审计发现并关闭的缺口 + +候选版初次自动验收后,三个维护工具仍带有旧目录假设:基线验证器引用不存在的`static/`, +架构清单写向不存在的候选文档目录,原样清单生成器假设`app/app`且会因试删文件直接异常。 +这些问题不改变产品页面,却会让接管者无法按指南复验,因此不能视为可维护性完成。 + +关闭方式: + +1. 基线验证器改为检查候选全量测试、两个生成注册表、`frontend/`下全部JavaScript、Git差异和 + 测试数据库完整性。 +2. 候选架构清单固定生成到`config/architecture-inventory.json`,从正式候选路径统计16页、 + 64类路由匹配、36张表、供应商/LLM入口、CSS层和热点文件。 +3. 原样资产清单、方法搬运和前端拆分明确标为迁移期工具;可能写文件的操作必须显式传路径或 + `--apply`,默认帮助路径不改文件。 +4. 新增维护工具契约测试,保证生成文件新鲜、所有工具`--help`可用,旧`static/`路径不会回归。 +5. 跨到2026-08-01周六后,实时详情测试中用运行日构造的“固定时间”不再代表交易日;原版和 + 候选测试夹具同步固定到明确工作日,消除跨午夜/周末不确定性。产品实现与交易日规则未改, + 随后统一验收再次通过302项Python测试和45项Playwright。 +6. 独立导出`app/`后成功启动健康接口,236项非迁移业务/前端测试通过;同时发现六项日常前端 + 契约经辅助函数隐式读取旧`static/app.js`。完成人工验收后,日常契约已改为装配当前注册脚本; + 只有确有价值的静态资产、页面前缀及后端AST差分继续读取原版,避免历史源码回放成为第二套维护对象。 +7. 对切片10十组截图重新做像素审计,九组平均色差均低于0.3/255;集合竞价候选图实际为登录 + 失效页,已明确标为无效并撤销其截图证明力。集合竞价最终视觉继续列为人工验收项。 +8. 统一验证器现在按环境选择完整保真套件或候选自有套件;系统临时目录中的纯`app/`导出通过 + 242项测试、注册表、24个JavaScript文件和SQLite检查。架构热点大小按归一化UTF-8计算, + CRLF/LF不再导致清单失效;正式仓库最终通过305项测试和45项Playwright。 + +## 4. 最终人工裁决与部署边界 + +2026-08-01用户在隔离端口`8797`浏览全部页面并测试全部功能,确认视觉与功能迁移成功;发现的 +问题几乎都属于原版遗留问题,未发现阻止验收的迁移回归。该结论已经关闭以下迁移裁决: + +1. 切片11试删候选确认为废弃,恢复标签继续保留。 +2. 页面视觉、功能、交互和动画的人工验收完成。 +3. 允许建立本地迁移完成标签并推送Gitea。 + +该结论不授权切换正式数据库、Docker或NAS,也不授权删除根目录原版、数据库备份或冻结的 +`next/`记录。部署切换继续以`人工维护与本地切换指南.md`为准,并须单独获得用户批准。 diff --git a/docs/migration/evidence/slice-11/database-diff.json b/docs/migration/evidence/slice-11/database-diff.json new file mode 100644 index 0000000..a65ce9a --- /dev/null +++ b/docs/migration/evidence/slice-11/database-diff.json @@ -0,0 +1,202 @@ +{ + "all_equal": true, + "schema": { + "object_count": 62, + "original_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "migrated_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "equal": true + }, + "tables": [ + { + "table": "users", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "migrated_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "equal": true, + "excluded_columns": [] + }, + { + "table": "system_settings", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "migrated_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "equal": true, + "excluded_columns": [] + }, + { + "table": "watchlist", + "original_count": 6, + "migrated_count": 6, + "original_sha256": "070161f5cdcc33addf289f11cb0ae54bfc0d669a39426fc33398b64512dba2fe", + "migrated_sha256": "070161f5cdcc33addf289f11cb0ae54bfc0d669a39426fc33398b64512dba2fe", + "equal": true, + "excluded_columns": [] + }, + { + "table": "review_notes", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "86ed485c2ce922e3434f8ac742d38431ef430b5c22024cacb6f64f0e8e71ee98", + "migrated_sha256": "86ed485c2ce922e3434f8ac742d38431ef430b5c22024cacb6f64f0e8e71ee98", + "equal": true, + "excluded_columns": [] + }, + { + "table": "trade_entries", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "alerts", + "original_count": 2, + "migrated_count": 2, + "original_sha256": "3fd3b7ceb0950d543fba9cebdd2b4294fe187b37a6b8d4755a49428661b3ae1c", + "migrated_sha256": "3fd3b7ceb0950d543fba9cebdd2b4294fe187b37a6b8d4755a49428661b3ae1c", + "equal": true, + "excluded_columns": [] + }, + { + "table": "assistant_messages", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "mentor_messages", + "original_count": 28, + "migrated_count": 28, + "original_sha256": "b906b776d575ff6fe459b2aa0e8b396267feed36d3d85f7edd7947b284482aeb", + "migrated_sha256": "b906b776d575ff6fe459b2aa0e8b396267feed36d3d85f7edd7947b284482aeb", + "equal": true, + "excluded_columns": [] + }, + { + "table": "mentor_preferences", + "original_count": 45, + "migrated_count": 45, + "original_sha256": "c19c7d05e6745e4f1787d1eed5f39d7e555ec24f8e490b585c19158edc2505ec", + "migrated_sha256": "c19c7d05e6745e4f1787d1eed5f39d7e555ec24f8e490b585c19158edc2505ec", + "equal": true, + "excluded_columns": [] + }, + { + "table": "heaven_readings", + "original_count": 31, + "migrated_count": 31, + "original_sha256": "e6cfc86f010fb182d7522bb99e5d268e826f93896035172120df51a011590951", + "migrated_sha256": "e6cfc86f010fb182d7522bb99e5d268e826f93896035172120df51a011590951", + "equal": true, + "excluded_columns": [] + }, + { + "table": "user_birth_profiles", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "2a74d4b2edd3a730a46f17fb6ab3926575c42662c1d968643b0d54586ab68b13", + "migrated_sha256": "2a74d4b2edd3a730a46f17fb6ab3926575c42662c1d968643b0d54586ab68b13", + "equal": true, + "excluded_columns": [] + }, + { + "table": "sector_phase_overrides", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "screener_strategies", + "original_count": 36, + "migrated_count": 36, + "original_sha256": "872846dcb746446bda37723e63db737a2a0cf0540eb6a1da264012248887f4c5", + "migrated_sha256": "872846dcb746446bda37723e63db737a2a0cf0540eb6a1da264012248887f4c5", + "equal": true, + "excluded_columns": [ + "updated_at" + ] + }, + { + "table": "screener_runs", + "original_count": 250, + "migrated_count": 250, + "original_sha256": "9f58ff2f85e5b85878153f7694161620d77cb9b0f351754f2974a8a0cc8ad8fb", + "migrated_sha256": "9f58ff2f85e5b85878153f7694161620d77cb9b0f351754f2974a8a0cc8ad8fb", + "equal": true, + "excluded_columns": [] + }, + { + "table": "strategy_tracks", + "original_count": 16, + "migrated_count": 16, + "original_sha256": "f0639b1386b69c92fd815f929864b3b2457a6bf4ca515bee2dca87e9ea29e8c4", + "migrated_sha256": "f0639b1386b69c92fd815f929864b3b2457a6bf4ca515bee2dca87e9ea29e8c4", + "equal": true, + "excluded_columns": [] + }, + { + "table": "auction_factors", + "original_count": 511914, + "migrated_count": 511914, + "original_sha256": "3d0470787adaf7c4cf5f15f5ad9fa1d67c8fcd4807285ac264eeacdcf5054cd1", + "migrated_sha256": "3d0470787adaf7c4cf5f15f5ad9fa1d67c8fcd4807285ac264eeacdcf5054cd1", + "equal": true, + "excluded_columns": [] + }, + { + "table": "popularity_factors", + "original_count": 232, + "migrated_count": 232, + "original_sha256": "3f4c61a13ceaa1ed9ecb28f86241a8a478a6757d6a44b46f432f73c0226bba7f", + "migrated_sha256": "3f4c61a13ceaa1ed9ecb28f86241a8a478a6757d6a44b46f432f73c0226bba7f", + "equal": true, + "excluded_columns": [] + }, + { + "table": "seat_aliases", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "reason_overrides", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "llm_usage", + "original_count": 72, + "migrated_count": 72, + "original_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "migrated_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "equal": true, + "excluded_columns": [] + }, + { + "table": "wencai_saved_queries", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + } + ] +} diff --git a/docs/migration/evidence/slice-11/manual-acceptance.md b/docs/migration/evidence/slice-11/manual-acceptance.md new file mode 100644 index 0000000..0268f45 --- /dev/null +++ b/docs/migration/evidence/slice-11/manual-acceptance.md @@ -0,0 +1,33 @@ +# 切片 11:用户人工验收记录 + +> 验收日期:2026-08-01 +> 验收地址:`http://127.0.0.1:8797/` +> 数据边界:迁移审计数据库副本,未写正式数据库 +> 结论:通过 + +## 验收范围 + +用户在迁移版中浏览了全部页面,并测试了全部可操作功能。验收覆盖页面视觉、布局、主题、 +交互、动画、行情读取、LLM功能及主要写入流程。验收期间使用的Tushare、iFinD和主LLM均完成 +真实最小调用验证,迁移版能够读取数据库中加密保存的原配置。 + +## 用户结论 + +迁移版在视觉和功能上迁移成功。人工检查中发现的问题几乎全部属于原版已经存在的遗留问题; +未发现阻止本次验收的`app/`目录迁移回归。 + +## 最终裁决 + +1. 接受`app/`与原版在功能、视觉、交互和动画上的保真结果。 +2. 确认切片11登记的`demo_data.py`、旧问天加载文件和5个无消费者前端函数可以永久废弃。 +3. 保留`wencai_saved_queries`及证据不足的相邻资产,继续承担旧数据库兼容责任。 +4. 允许建立本地迁移完成提交和标签并推送Gitea。 +5. 本次验收不授权切换Docker/NAS、删除原版或改写正式数据库;部署切换必须另行决定。 + +## 证据关系 + +- 自动完成度审计:`completion-audit.md` +- 不确定代码处置:`uncertain-code-audit.md` +- 浏览器自动记录:`browser-acceptance.json` +- API和数据库差分:`api-diff.json`、`database-diff.json` +- 回档基线:`xiaobai-preservation-slice-10-20260731` diff --git a/docs/migration/evidence/slice-11/screenshot-pixel-audit.json b/docs/migration/evidence/slice-11/screenshot-pixel-audit.json new file mode 100644 index 0000000..703a97d --- /dev/null +++ b/docs/migration/evidence/slice-11/screenshot-pixel-audit.json @@ -0,0 +1,27 @@ +{ + "schema_version": 1, + "audited_at": "2026-08-01T01:55:00+08:00", + "source_directory": "docs/migration/evidence/slice-10", + "difference_threshold_per_channel": 8, + "valid_pairs": [ + {"view": "dark-sentiment-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.065, "changed_pixel_percent": 0.123}, + {"view": "dark-sentiment-390x844", "size": "375x812", "mean_absolute_difference": 0.009, "changed_pixel_percent": 0.012}, + {"view": "heaven-fortune-light-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.043, "changed_pixel_percent": 0.046}, + {"view": "heaven-heart-breath-light-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.256, "changed_pixel_percent": 0.545}, + {"view": "heaven-heart-intro-light-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.047, "changed_pixel_percent": 0.068}, + {"view": "heaven-trend-390x844", "size": "390x844", "mean_absolute_difference": 0.284, "changed_pixel_percent": 0.712}, + {"view": "heaven-trend-light-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.040, "changed_pixel_percent": 0.063}, + {"view": "light-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.000, "changed_pixel_percent": 0.000}, + {"view": "screener-light-1920x1080", "size": "1683x1080", "mean_absolute_difference": 0.064, "changed_pixel_percent": 0.157} + ], + "invalid_pairs": [ + { + "view": "auction-light-1920x1080", + "mean_absolute_difference": 15.820, + "changed_pixel_percent": 77.932, + "reason": "The migrated image is an expired-login page, not the auction workspace.", + "disposition": "Renamed INVALID-login-session and excluded from visual-equivalence evidence." + } + ], + "conclusion": "Nine valid pairs are geometrically and visually consistent within dynamic rendering noise. Auction remains a manual visual acceptance item." +} diff --git a/docs/migration/evidence/slice-11/uncertain-code-audit.md b/docs/migration/evidence/slice-11/uncertain-code-audit.md new file mode 100644 index 0000000..8e90f47 --- /dev/null +++ b/docs/migration/evidence/slice-11/uncertain-code-audit.md @@ -0,0 +1,91 @@ +# 切片 11:不确定代码审计日志 + +> 审计基线:`dec3cd12365df5e7d4c391369f14c457cf56d7d9` +> 恢复标签:`xiaobai-preservation-slice-10-20260731` +> 原则:只有静态引用、动态注册、运行路径和兼容责任同时排除后才试删;其余继续保留 +> 当前状态:自动与人工验收均已通过,试删项于2026-08-01确认废弃 + +本日志记录试删前的原位置、内容指纹、证据、决定和恢复方式。试删阶段不等于永久废弃; +2026-08-01用户完成迁移版全部页面和功能人工检查,确认视觉与功能迁移成功,所见问题几乎都 +属于原版遗留问题,未发现阻止验收的迁移回归。该人工结论关闭了本日志的最终确认门槛。 + +## 1. `app/demo_data.py` + +- 类型:旧演示行情构造器,376行、17,199字节。 +- SHA-256:`fb69682d499993534e7ee029989b35cf512c455eec49e07d7b09658cddd9e028`。 +- 静态引用:运行代码、配置、启动入口、Docker、页面及后台任务均没有导入或调用`DEMO_LIMITS`、`build_demo_dashboard`、`build_demo_dragon_tiger`或`build_demo_stock_detail`。 +- 动态/注册路径:没有模块名字符串、插件注册或反射加载。 +- 产品事实:`app/README.md`明确主行情不再回退演示数据;行情服务和Repository只负责排除历史`source=demo`缓存,未依赖本文件。 +- 兼容责任:不参与数据库schema、历史记录解释或配置读取。 +- 最终决定:确认废弃;切片10标签继续保留单项恢复能力。 +- 恢复:从切片10标签恢复`app/demo_data.py`。 + +## 2. `app/frontend/heaven-loading.js` + +- 类型:旧版问天加载动画,642行、30,563字节。 +- SHA-256:`ee914762b893a89f745e9e705cac6840c1dbd6c5b68dc7a47620b8c4db3615c7`。 +- 静态引用:`app/frontend/index.html`只加载`/pages/heaven/loading-v2.js`,没有加载本文件。 +- 动态/注册路径:没有脚本清单、页面注册表或运行时代码引用旧路径;新旧文件虽然都导出`window.HeavenLoadingCanvas`,但浏览器只能执行v2。 +- 运行证据:切片10已覆盖观势、观气和观心解读加载动画,v2节点、动画名及可见行为与原版基线一致。 +- 兼容责任:不是数据库、配置或历史数据资产。 +- 最终决定:确认废弃;切片10标签继续保留单项恢复能力。 +- 恢复:从切片10标签恢复该文件。 + +## 3. 五个疑似无引用前端函数 + +全前端非供应商JavaScript逐词扫描后,下列符号都只有定义本身一次;HTML、页面注册表、事件绑定、字符串查找、测试入口和其他脚本均无消费者: + +| 函数 | 位置 | 原用途线索 | 决定 | +|---|---|---|---| +| `commonReviewColumns` | `frontend/shared/export.js` | 旧通用导出列定义;当前每个导出入口均显式传列 | 确认废弃 | +| `outcomeClass` | `frontend/app.js` | 旧昨日涨停结果样式映射;当前渲染不调用 | 确认废弃 | +| `screenerResultMatchesSelection` | `frontend/pages/screener/page.js` | 旧选股结果存在性包装;已由`activeScreenerResultEntry`直接承担 | 确认废弃 | +| `selectRegime` | `frontend/pages/screener/page.js` | 旧阶段手动切换;当前阶段由盘后数据写入且无按钮绑定 | 确认废弃 | +| `showHeartRitualCurtain` | `frontend/pages/heaven/page.js` | 旧观心幕帘过场;当前流程直接调用`activateHeartRises` | 确认废弃 | + +本次只删除这5个函数,不连带删除`selectedRegime`、`heartRitualCurtain`隐藏节点、`heartCurtainTimer`或相关CSS。后者与仍在使用的选股状态、观心节点和复合选择器相邻,尚不足以证明可独立删除,默认保留。 + +恢复:从切片10标签按上述文件恢复对应函数;源码映射可通过`docs/migration/evidence/slice-10/frontend-source-map.json`定位。 + +## 4. `wencai_saved_queries`及其方法 + +- 类型:历史兼容数据表及用户隔离Repository方法。 +- 当前入口:问财前端和`/api/wencai*`已按用户决定取消;iFinD的`wencai()`能力仍由股池原因补全使用,但不依赖保存查询表。 +- 保留责任:数据库初始化仍创建表和用户索引;`list_wencai_saved_queries`、`save_wencai_query`、`delete_wencai_saved_query`保持已有数据可读取;`test_ifind_features`明确验证跨用户隔离。 +- 风险:当前数据库表为空不能证明所有用户历史库均为空;删除会改变62项schema契约并破坏旧库兼容。 +- 决定:保留,不试删。只有未来正式数据库迁移、导出/归档和用户批准同时具备时才允许移除。 + +## 5. 试删验收门槛 + +每次试删后必须同时满足: + +1. 全前端符号与资源引用扫描没有悬空消费者。 +2. 全部JavaScript通过`node --check`。 +3. 原版231项测试继续通过,迁移版全量测试通过。 +4. 21个固定只读API与数据库schema/关键表差分继续一致;明确批准删除的运行外文件不应改变API或数据库。 +5. 45项Playwright通过,问天加载动画与智能选股流程无回归。 +6. 用户使用迁移版完成最终人工页面验收。 + +任一项失败时,按本日志指向的切片10标签恢复对应候选,不把其他已通过候选一起回退。 + +## 6. 试删后结果 + +- 五个前端符号在全部非供应商JavaScript中的剩余引用均为0。 +- 运行代码中没有`demo_data`导入;页面只请求`/pages/heaven/loading-v2.js`。 +- 24个现存前端JavaScript文件通过`node --check`。 +- 原版231项、迁移版298项Python测试和45项Playwright全部通过。 +- 21个只读API、62个schema对象和21张关键表继续与原版一致。 +- 桌面日间/夜间及390x844移动端真实页面检查通过,问天三页和观气底部内容可达。 +- `wencai_saved_queries`及三个方法保持存在,并由清理契约测试持续保护。 + +## 7. 人工最终确认 + +- 验收日期:2026-08-01。 +- 验收运行时:隔离端口`8797`与迁移审计数据库副本。 +- 验收范围:用户逐页浏览全部页面并测试全部可操作功能。 +- 验收结论:视觉与功能迁移成功;发现的问题几乎都是原版遗留问题,未发现阻止验收的迁移回归。 +- 删除结论:`demo_data.py`、旧问天加载文件和上述5个无消费者函数正式确认为废弃; + `wencai_saved_queries`及证据不足的相邻DOM、状态和CSS继续保留。 + +确认废弃不取消恢复证据。若后续发现历史兼容责任,可从 +`xiaobai-preservation-slice-10-20260731`按本日志记录单项恢复,不回退其他迁移成果。 diff --git a/docs/migration/next失败冻结记录.md b/docs/migration/next失败冻结记录.md new file mode 100644 index 0000000..a711429 --- /dev/null +++ b/docs/migration/next失败冻结记录.md @@ -0,0 +1,29 @@ +# `next/`失败冻结记录 + +> 决策日期:2026-07-30 +> 状态:用户验收失败,永久冻结,禁止部署 + +## 结论 + +`next/`采用重新实现方式建立,与本次迁移的真实目标不一致。用户确认其页面视觉、布局和基础功能 +未达到原系统等价要求,因此该目录不再作为产品候选、迁移成果或后续重构基础。 + +原发布候选`xiaobai-next-rc-20260730-1`自本记录生效起作废。不得使用`next/Dockerfile`、 +`next/compose.yaml`或`next/compose.preflight.yaml`部署任何正式或预检环境。 + +## 冻结边界 + +1. `next/`只保留作失败复盘、测试思路和迁移工具参考,不再修补产品功能或视觉。 +2. 后续迁移不得从`next/`反向覆盖原系统,也不得把其页面作为视觉基准。 +3. 原系统仍是唯一产品事实和视觉基线;后续工作必须采用原代码保真式结构迁移。 +4. 未经用户新的明确决定,不删除`next/`,不移动失败标签,不恢复其发布候选身份。 +5. `next/data/`中的本地迁移副本继续保持Git忽略,不作为生产数据。 + +## 失败原因 + +- 错误地把“建立独立目录并迁移”执行成了重新设计和重新实现。 +- 自动测试主要验证新实现内部契约,没有证明与原系统逐页面、逐状态、逐像素等价。 +- 以代码行数下降和规格案例覆盖代替了原系统完整行为保真。 +- 用户人工验收确认视觉、布局及基础功能不可作为正式产品使用。 + +本记录优先于`next/`内所有阶段完成、发布候选、预检和切换说明。 diff --git a/docs/migration/人工维护与本地切换指南.md b/docs/migration/人工维护与本地切换指南.md new file mode 100644 index 0000000..fc2501c --- /dev/null +++ b/docs/migration/人工维护与本地切换指南.md @@ -0,0 +1,159 @@ +# 小白复盘人工维护与本地切换指南 + +> 历史文档:记录迁移验收期间的双版本操作,已由`docs/maintenance/人工维护指南.md`取代。 +> 其中涉及父目录原版和迁移比较工具的命令不再作为当前维护流程执行。 +> +> 适用目录:`webapp/app/` +> 当前状态:本地迁移已完成自动与用户人工验收;正式数据库、Docker和NAS尚未切换 + +## 1. 先确认哪个版本是正式版本 + +- 当前正式基线仍是`webapp/`根目录及根目录`data/review.db`。 +- `webapp/app/`是已完成人工验收的保真迁移版本,运行代码来自原版的移动、机械拆分和去重, + 不是重新开发。 +- `webapp/next/`是已否决的冻结版本,禁止部署、继续开发或复制实现。 +- 用户人工验收前,不要删除根级原版,不要让`app/`写入正式数据库,也不要修改NAS容器。 + +发生产品含义冲突时,依次以用户明确决定、原版真实运行、原版源码与数据、产品规格书为准。 + +## 2. 迁移版目录怎么找代码 + +```text +app/ + server.py 稳定进程入口;正式实现装配在backend/ + database.py SQLite初始schema与Repository组合入口 + api_access.py API访问级别注册入口 + sync_data.py 手工行情同步命令 + backend/bootstrap/ 路径、环境、配置、依赖组装和HTTP服务器 + backend/http/ 鉴权、路由元数据、响应与静态资源传输 + backend/features/ 按产品领域组织的服务和Repository + backend/data/ 数据网关、质量策略、实时聚合和供应商适配 + backend/database/ SQLite连接、schema和组合Repository + backend/jobs/ 后台任务定义、状态、调度与重试 + backend/llm/ 所有模型调用、流式传输、额度与审计边界 + frontend/shared/ API、状态、令牌、Shell、组件与共享样式 + frontend/pages/ 页面结构、行为与页面专属样式 + config/ 页面、功能、API、任务、字段和数据质量注册表 + tests/ 单元、边界、保真差分和浏览器回归 + tools/ 清单、API/数据库差分和保真运行工具 + data/ 运行数据库、私有Skill和备份;不提交Git + runtime/ 本地日志、缓存、PID与浏览器测试产物;不提交Git + 游资skills/ 可公开的问师Skill +``` + +根目录不再保留业务兼容导入壳。维护业务时直接到`backend/features/<领域>/`或 +`backend/data/`寻找唯一实现,不得重新建立根级转发文件。所有浏览器网络请求必须继续经过 +`frontend/shared/api.js`,所有LLM调用必须继续经过`backend/llm/`。 + +## 3. 本地隔离启动 + +不要直接拿正式数据库做迁移验收。先创建一个目录并用SQLite backup API生成一致副本,或使用 +`app/data/backups/`中专门的验收副本。然后在`webapp`根目录运行: + +```powershell +python -u app\tools\run_preservation_runtime.py ` + --runtime-root app ` + --data-dir app\data\backups\manual-acceptance ` + --port 8797 +``` + +浏览器打开`http://127.0.0.1:8797/`。该命令不占用正式`8765`,并把数据库、私有Skill和 +运行写入限制在指定测试目录。验收完成后先停止该进程,再处理测试副本。 + +## 4. 每次改动的最低流程 + +1. 阅读`AGENTS.md`、保真迁移状态、迁移账本和对应领域测试。 +2. 从`config/pages.config.json`与`features.config.json`确认页面、功能和权限边界。 +3. 只修改一个完整领域路径;不要建立根级兼容壳或第二套实现。 +4. 新增API时同步检查`config/api.config.json`及`backend/http/`的权限元数据。 +5. 用户私有表必须包含并按`user_id`查询,补充跨账号隔离测试。 +6. 行情字段必须登记来源、时间、单位、复权、新鲜度和降级规则,不允许静默换源。 +7. 先跑领域测试,再跑下面的全量门槛,最后用真实浏览器检查桌面、夜间和移动端。 +8. 更新迁移/维护文档后再提交;一个可回档节点只包含一个可以独立解释的改动。 + +## 5. 全量验证命令 + +原版基线: + +```powershell +cd webapp +python -m unittest discover -s tests -q +``` + +迁移版: + +```powershell +cd webapp\app +python tools\verify_baseline.py +python tools\verify_baseline.py --e2e +``` + +第一条命令已经包含迁移版全量单元测试、API/架构注册表新鲜度、全部前端JavaScript语法、 +Git空白错误和测试数据库只读完整性检查。第二条额外运行Playwright。工具的日常/验收/迁移期 +分类见`app/tools/README.md`;迁移期工具不是正常开发命令。 + +Playwright需要能够启动本机无头Edge。若测试停在浏览器启动前且没有`msedge`进程,先检查执行 +环境是否禁止GUI/无头浏览器进程;这不是页面失败,不要通过删除测试或延长产品超时绕过。 + +API和数据库差分工具: + +```text +app/tools/compare_preservation_apis.py +app/tools/compare_preservation_databases.py +``` + +运行前先查看脚本参数,并使用同一时点生成的原版/迁移版数据库副本。任何`all_equal=false`都应 +阻止提交和切换。 + +## 6. 数据、密钥和私有内容 + +- SQLite数据库与`.env`中的`APP_ENCRYPTION_KEY`必须成对备份;密钥丢失后不能恢复加密字段。 +- `data/private-mentor-skills/`只属于管理员本机/服务器,不进入Git和Docker镜像。 +- 不要用文件管理器复制正在写入的`review.db`;使用SQLite backup API或停服后复制。 +- 不要把Tushare、iFinD、LLM Token、账号密码、数据库副本或私有Skill提交到仓库。 +- 切换期间只有一个数据库可以成为写入主库,禁止让原版与迁移版长期各写一份后再人工合并。 + +## 7. 人工验收清单 + +2026-08-01用户已在隔离端口`8797`完成全部页面和功能验收,确认视觉与功能迁移成功;所见问题 +几乎都属于原版遗留问题,未发现阻止验收的迁移回归。以下清单继续作为后续结构修改和部署 +切换时的回归标准: + +- 用同一账号、日期和主题对照原版与迁移版全部页面。 +- 检查日间/夜间、1080P/4K、390像素移动端和浏览器缩放后的滚动与弹窗。 +- 检查图表悬浮、股票/板块/题材/指数详情、全局搜索和日期切换。 +- 检查选股三个工作区、策略跟踪、刷新后结果保持和候选来源隔离。 +- 检查问师流式回答只出现一次、置顶排序、历史和会员限制。 +- 检查问天三页全部过场、呼吸/铜钱、加载动画、历史和解读结果。 +- 使用两个账号检查自选、笔记、交易日志、提醒和对话互不可见。 +- 检查系统管理、会员期限、模型池、数据回补和后台任务状态。 + +人工验收发现差异时,记录页面、账号、日期、主题、视口、输入和截图;先对照原版复现,再判断 +是迁移回归还是原版既有问题。 + +## 8. 获得部署批准后的本地切换方案 + +以下只是准备步骤,本次迁移没有执行: + +1. 停止原版和迁移版进程,确认没有后台任务继续写库。 +2. 对根目录正式数据库执行SQLite一致性备份,同时备份`.env`和私有Skill。 +3. 把同一份最新正式数据恢复到`app/data/`,保持原`APP_ENCRYPTION_KEY`不变。 +4. 在非`8765`端口启动`app/server.py`并完成健康、登录、关键页面和写入冒烟测试。 +5. 记录切换提交、数据库备份位置和启动时间后,才把正式入口指向`app/`。 +6. 切换观察期内保留根级原版和切换前数据库,只允许迁移版写主库。 + +Docker/NAS切换应以`app/`作为构建上下文,另行执行构建、卷挂载、权限、健康检查和回退演练。 +本轮没有进行这些操作。 + +## 9. 回退方案 + +若切换后出现问题: + +1. 立即停止迁移版,避免继续写库。 +2. 保存故障日志和当前数据库副本用于调查。 +3. 恢复切换前成对备份的`review.db`与`.env`。 +4. 从切换记录指定的原版提交重新启动根级`server.py`。 +5. 验证登录、健康接口、最近交易日、私有数据和模型配置后恢复使用。 + +切片11已确认废弃项仍可从`xiaobai-preservation-slice-10-20260731`单项恢复;不要用破坏性的 +Git重置覆盖正式数据或用户未提交的代码。 diff --git a/docs/migration/保真迁移状态.json b/docs/migration/保真迁移状态.json new file mode 100644 index 0000000..cb29ac7 --- /dev/null +++ b/docs/migration/保真迁移状态.json @@ -0,0 +1,76 @@ +{ + "schema_version": 1, + "updated_at": "2026-08-03T21:31:06+08:00", + "status": "standalone_closure_verified_checkpoint_pending", + "migration_mode": "behavior_preserving_source_migration", + "source_of_truth": "standalone_app_runtime_and_source", + "source_root": ".", + "target_root": ".", + "failed_roots": [], + "retired_external_roots": [ + "parent original runtime", + "parent next directory" + ], + "current_slice": "standalone-closure", + "last_completed_slice": "standalone-closure", + "last_automated_slice": "standalone-closure", + "last_checkpoint": "xiaobai-standalone-closure-20260803", + "next_action": "create and push the standalone closure checkpoint, then clean retired parent content in a separate reversible commit", + "authoritative_documents": [ + "AGENTS.md", + "ARCHITECTURE.md", + "docs/product/小白复盘-完整产品规格说明书.md", + "docs/maintenance/人工维护指南.md" + ], + "hard_invariants": [ + "do_not_use_next_as_migration_source", + "do_not_rewrite_existing_product_behavior", + "do_not_change_technology_stack_without_explicit_user_approval", + "preserve_visual_interaction_animation_calculation_and_data_semantics", + "do_not_depend_on_parent_source_tests_static_config_or_data", + "keep_one_canonical_owner_for_each_runtime_responsibility", + "keep_secrets_databases_private_skills_and_runtime_artifacts_out_of_git", + "do_not_switch_docker_or_nas_before_user_approval" + ], + "approved_decisions": { + "target_directory_name": "app", + "target_directory_structure": "approved_2026-07-30", + "migration_slice_order": "approved_2026-07-30", + "execution_mode": "autonomous_until_complete", + "manual_visual_and_functional_acceptance": "approved_2026-08-01", + "slice_11_trial_retirements": "confirmed_retired_2026-08-01", + "styles_css_governance": "automated_complete_manual_visual_pending_2026-08-02", + "frontend_html_governance": "automated_complete_manual_visual_pending_2026-08-03", + "frontend_app_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "frontend_market_runtime_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "screener_engine_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "tushare_provider_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "heaven_service_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "market_insights_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "application_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "preservation_audit_governance": "automated_complete_manual_acceptance_pending_2026-08-03", + "root_compatibility_modules": "19_retired_after_reference_scan_2026-08-03", + "runtime_artifact_boundary": "centralized_under_runtime_2026-08-03", + "standalone_source_boundary": "verified_2026-08-03", + "permanent_documents_inside_app": "verified_2026-08-03", + "migration_comparison_scaffolding": "retired_after_standalone_acceptance_2026-08-03" + }, + "manual_acceptance": { + "accepted_at": "2026-08-01T09:42:04+08:00", + "runtime": "http://127.0.0.1:8797/", + "scope": "all pages and all user-testable functions", + "result": "visual and functional preservation accepted; observed issues were predominantly original-version legacy issues, with no migration regression found that blocks acceptance" + }, + "verification": { + "python_tests": 289, + "javascript_files": 39, + "api_routes": 74, + "playwright_tests": 46, + "sqlite_integrity": "ok", + "parent_runtime_references": 0 + }, + "open_decisions": [ + "retired_parent_cleanup_after_checkpoint", + "docker_and_nas_switch_timing" + ] +} diff --git a/docs/migration/保真迁移账本.md b/docs/migration/保真迁移账本.md new file mode 100644 index 0000000..d962667 --- /dev/null +++ b/docs/migration/保真迁移账本.md @@ -0,0 +1,466 @@ +# 小白复盘保真迁移账本 + +> 当前状态:正式源码独立化收口自动验收通过,等待建立并推送最终回档提交 + +本账本是上下文恢复和人工审计的连续记录。任何迁移提交必须在同一提交中更新本文件及 +`保真迁移状态.json`。 + +## 固定事实 + +- 原版根目录是唯一产品和视觉基线。 +- `next/`已被用户否决并冻结,不进入后续迁移。 +- 新目标目录由用户批准为`app/`,最终作为正式程序目录。 +- 后续采用原代码保真式迁移,不重新实现,不更换技术栈。 +- 2026-07-30用户授权在既定约束内自主完成全部迁移,阶段性差异仍必须阻断后续切片。 + +## 当前检查点 + +| 日期 | 提交或标签 | 事件 | 结论 | +|---|---|---|---| +| 2026-07-30 | `xiaobai-next-rejected-20260730` | 冻结失败的`next/`实现 | 禁止部署或继续开发 | +| 2026-07-30 | `xiaobai-preservation-migration-charter-20260730` | 建立保真迁移总纲、状态和恢复协议 | 尚未开始新迁移 | +| 2026-07-30 | `41329943c4878fc09ed82ec376eb93ab151e4092` | 完成只读资产清查并由用户批准`app/`结构 | 开始切片00 | +| 2026-07-31 | `xiaobai-preservation-slice-01-20260731` | 启动、HTTP、账号、会员与系统管理原实现归位 | 自动差分通过,进入切片02 | +| 2026-07-31 | `xiaobai-preservation-slice-02-20260731` | 公共行情、搜索、详情、图表与数据适配原实现归位 | 自动与浏览器差分通过,进入切片03 | +| 2026-07-31 | `xiaobai-preservation-slice-03-20260731` | 情绪周期、五类股池与涨停表现原实现归位 | 自动、API与浏览器差分通过,进入切片04 | +| 2026-07-31 | `xiaobai-preservation-slice-04-20260731` | 市场天梯与板块轮动原实现归位 | 自动、API与浏览器差分通过,进入切片05 | +| 2026-07-31 | `xiaobai-preservation-slice-05-20260731` | 集合竞价、题材库、人气热榜与龙虎榜原实现归位 | 自动、API、数据库与浏览器差分通过,进入切片06 | +| 2026-07-31 | `xiaobai-preservation-slice-06-20260731` | 智能选股、自定义选股与策略持续跟踪原实现归位 | 自动、API、数据库与浏览器差分通过,进入切片07 | +| 2026-07-31 | `xiaobai-preservation-slice-07-20260731` | 问师、模型Skill与LLM流式链路原实现归位 | 自动、API、数据库、Skill与浏览器差分通过,进入切片08 | +| 2026-07-31 | `xiaobai-preservation-slice-08-20260731` | 问天、观势、观气与观心原实现归位 | 自动、API、数据库、动画与浏览器差分通过,进入切片09 | +| 2026-07-31 | `xiaobai-preservation-slice-09-20260731` | 复盘、自选、交易日志、提醒与复盘助手原实现归位 | 自动、API、数据库、账户隔离与浏览器差分通过,进入切片10 | +| 2026-07-31 | `xiaobai-preservation-slice-10-20260731` | 前端Shell、页面、CSS、动画与移动端职责归位 | 源码重组、自动、API、数据库、桌面、夜间、移动端与动画差分通过,进入切片11 | +| 2026-07-31 | `xiaobai-preservation-slice-11-candidate-20260731` | 不确定代码审计、全量验收与人工交接准备 | 自动、API、数据库和浏览器验收通过;等待人工确认,未切换部署 | +| 2026-07-31 | `xiaobai-preservation-slice-11-audit-candidate-20260731` | 逐项目标审计并修复候选维护工具旧路径 | 302项测试、24个脚本、45项Playwright、21项API与62项schema差分通过;仍等待人工确认 | +| 2026-08-01 | `xiaobai-preservation-slice-11-audit-candidate-standalone-20260801` | 独立维护与截图证据复核 | 正式仓库305项、独立导出242项测试通过;撤销无效竞价截图;仍等待人工确认 | +| 2026-08-01 | `xiaobai-preservation-complete-20260801` | 用户逐页逐功能验收并完成迁移收尾 | 视觉与功能保真通过;试删确认废弃;本地交付完成,部署未切换 | +| 2026-08-03 | 工作区未提交 | 完成11项核心热点治理及历史保真审计脚手架退役 | 356项Python、全部当前JavaScript、SQLite完整性及46项Playwright通过;等待人工验收 | +| 2026-08-03 | `xiaobai-standalone-closure-20260803` | 正式源码独立化收口与最终回档 | 永久文档归位、父目录依赖清零、289项Python及46项Playwright通过;提交与推送执行中 | + +## 资产处置登记 + +开始清查后,每个资产必须登记,禁止只记录已迁移项而遗漏未处理项。 + +| 原位置/符号 | 类型 | 消费者 | 处置 | 新位置 | 等价证据 | 状态 | +|---|---|---|---|---|---|---| +| 原版运行源文件(排除`next/`、日志、缓存、构建产物和正式数据库) | 运行资产 | 全站 | 原样保留后逐项移动 | `app/` | 388项受控资产哈希一致;231项Python与45项Playwright测试通过 | 已复制 | +| `next/` | 失败实现 | 无正式消费者 | 原样保留但禁止迁移 | - | 用户冻结决定 | 已冻结 | +| `demo_data.py` | 旧演示代码 | 无运行、动态、配置或兼容消费者 | 确认废弃 | 切片10标签可单项恢复 | 全量自动、API、数据库、浏览器及用户人工验收通过 | 已删除 | +| `static/heaven-loading.js` | 旧动画 | 页面只加载`heaven-loading-v2.js` | 确认废弃 | 切片10标签可单项恢复 | 问天三页加载动画、45项Playwright及用户人工验收通过 | 已删除 | +| `commonReviewColumns`等5个前端函数 | 无引用符号 | 定义外引用为0 | 确认废弃 | 切片10标签可按原行号恢复 | 审计白名单比较、24个JS语法、浏览器流程及用户人工验收通过 | 已删除 | +| `wencai_saved_queries`及其方法 | 历史兼容数据 | 旧库兼容与用户隔离 | 原样保留 | `app/backend/database/`兼容区 | schema及关键表差分一致;清理契约持续保护 | 保留 | +| 现有7层CSS | 视觉运行资产 | 全部页面和主题 | 原样保留后逐页归档 | `app/frontend/` | 必须通过截图与计算样式差分 | 保留 | +| `sentiment_engine.py` | 情绪周期计算 | 总览、轮动、选股 | 移动并保留兼容别名 | `app/backend/features/sentiment/engine.py` | 文件哈希与原版一致;248项Python与45项Playwright通过 | 已移动 | +| `DashboardService`情绪及股池原因方法 | 业务服务 | 情绪页、五类股池、涨停表现 | 按职责机械移动 | `app/backend/features/sentiment/`、`app/backend/features/pools/` | 8个方法AST与原版一致;真实API完全一致 | 已移动 | +| `ReviewDatabase`原因覆盖方法 | 持久化 | 股池原因人工覆盖 | 按职责机械移动 | `app/backend/features/pools/repository.py` | 2个方法AST与原版一致;数据库schema哈希一致 | 已移动 | +| `DashboardService`板块轮动方法 | 业务服务 | 板块轮动页 | 按职责机械移动 | `app/backend/features/rotation/service.py` | 2个方法AST、真实API与原版一致 | 已移动 | +| Tushare天梯与轮动构造函数 | 公共数据计算 | 市场天梯、板块轮动 | 原位置保持唯一实现 | `app/backend/data/providers/tushare_client.py` | 2个构造函数AST与原版一致 | 已归位 | +| `MarketInsightsService` | 共享市场洞察服务 | 集合竞价、题材库、人气热榜 | 整体机械移动,保留唯一共享实现 | `app/backend/features/market/insights.py` | 22个方法AST与原版一致;根级模块为同一类对象别名 | 已移动 | +| `DashboardService`竞价、题材、人气与龙虎榜方法 | 业务服务 | 切片05四类页面与API | 按职责机械移动 | `app/backend/features/auction/`、`themes/`、`popularity/`、`dragon_tiger/` | 8个方法AST、7个真实API与原版一致 | 已移动 | +| `ReviewDatabase`竞价、人气与龙虎榜方法 | 持久化 | 市场洞察及后续智能选股 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/auction/repository.py`、`popularity/repository.py`、`dragon_tiger/repository.py` | 7个方法AST一致;62个schema对象及5张关键表逐行一致 | 已移动 | +| Tushare游资名录与龙虎榜实现 | 公共数据计算 | 龙虎榜与游资档案 | 原位置保持唯一实现 | `app/backend/data/providers/tushare_client.py` | 2个方法AST与原版一致 | 已归位 | +| 选股引擎、策略库与公式编译器 | 业务计算 | 阶段、策略、自定义选股 | 整体机械移动并保留兼容别名 | `app/backend/features/screener/engine.py`、`strategies.py`、`compiler.py` | 原版AST/源码等价;根级模块为同一模块对象 | 已移动 | +| `DashboardService`选股方法 | 业务服务 | 选股三个工作区 | 按职责机械移动 | `app/backend/features/screener/service.py` | 13个方法AST及3个真实API一致 | 已移动 | +| `ReviewDatabase`选股方法 | 持久化 | 因子、策略运行、候选与跟踪 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/screener/repository.py` | 25个方法AST一致;62个schema对象及13张关键表逐行一致 | 已移动 | +| `StrategyTrackingService` | 业务服务 | 手动候选持续跟踪 | 保持唯一实现并调整容器导入 | `app/backend/features/screener/tracking.py` | 类定义AST、真实API与浏览器行为一致 | 已归位 | +| `mentor_agent.py`与问师服务 | 业务服务 | Skill发现、问师上下文与流式回答 | 整体机械移动并保留兼容别名 | `app/backend/features/mentor/` | Agent文件哈希、8个服务方法AST、2个真实API及浏览器行为一致 | 已移动 | +| 问师消息与偏好方法 | 持久化 | 用户对话、置顶和排序 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/mentor/repository.py` | 5个方法AST一致;相关表逐行一致 | 已移动 | +| `llm_stream.py`与模型访问方法 | 公共模型能力 | 问师、问天、复盘助手与策略编译 | 移入唯一模型边界并保留兼容别名 | `app/backend/llm/` | 流式文件哈希一致;21个服务方法与既有用户边界一致 | 已移动 | +| 公开`游资skills` | 运行资产 | 问师模型库 | 原样保留 | `app/游资skills/` | 190个文件逐路径和SHA-256一致 | 已复制 | +| `heaven_agent.py`、`heaven_engine.py`与问天服务 | 业务计算 | 观势、观气、观心 | 机械移动并保留兼容别名 | `app/backend/features/heaven/` | Agent文件哈希、引擎定义AST、20个服务方法、6个API及真实动画页面等价 | 已移动 | +| 问天历史方法 | 持久化 | 三类解读历史与当日解运复用 | 按职责机械移动 | `app/backend/features/heaven/repository.py` | 5个方法AST一致;62个schema对象及6张关键表逐行一致 | 已移动 | +| `assistant_agent.py`与复盘服务 | 业务服务 | 我的复盘、自选、交易日志与复盘助手 | 机械移动并保留兼容别名 | `app/backend/features/review/` | Agent文件哈希、8个服务方法AST、5个真实API及会员/非会员页面等价 | 已移动 | +| 复盘、自选、交易日志与助手消息方法 | 持久化 | 用户私有复盘数据 | 按职责机械移动并保持Mixin原接口 | `app/backend/features/review/repository.py` | 13个方法AST一致;相关表逐行一致;浏览器账户隔离通过 | 已移动 | +| 提醒编排与提醒持久化方法 | 业务服务/持久化 | 提醒中心与策略跟踪提醒 | 按职责机械移动 | `app/backend/features/alerts/` | 5个服务方法、6个Repository方法AST及真实API一致 | 已移动 | +| `static/app.js` | 前端总运行时 | 全站页面、状态、交互与动画 | 按原连续行机械拆分 | `app/frontend/app.js`、`pages/*/page.js`、`pages/market/{breadth,charts,entity-detail,stock-detail,preview,search,bindings}.js`、`shared/export.js` | 9,283行重组SHA-256与原版一致;完整基线及浏览器测试通过 | 已移动 | +| `static/index.html` | 前端DOM骨架 | 全站 | 只调整资源路径和拆分脚本加载 | `app/frontend/index.html` | 反向替换路径与脚本后逐字符一致;浏览器差分通过 | 已移动 | +| `static/styles.css`等七层样式 | 视觉运行资产 | 全部页面、主题和移动端 | 字节级移动 | `app/frontend/styles/`、`app/frontend/pages/heaven/page.css`、`app/frontend/shared/tokens.css` | 逐文件SHA-256一致;桌面、夜间和移动端计算样式一致 | 已移动 | +| `static/ui-core.js`、页面/共享脚本和供应商资产 | 前端共享/第三方资产 | Shell、页面注册、通用组件与图标 | 字节级移动 | `app/frontend/shared/`、`pages/`、`vendor/` | 逐文件SHA-256一致;45项Playwright和真实浏览器差分通过 | 已移动 | + +处置只允许:`原样保留`、`移动`、`合并重复`、`待定`、`确认废弃`。 + +## 切片记录 + +每个切片记录以下内容:原版基线、复制范围、必要路径调整、差异测试、人工验收、未关闭问题和回档提交。 +已完成切片:`slice-00-exact-runtime-copy`。 + +- 原版基线:提交`41329943c4878fc09ed82ec376eb93ab151e4092`。 +- 复制范围:确认参与运行、测试、部署和维护的原版文件;排除`next/`和运行产物。 +- 允许改动:新目录中的路径配置、测试根目录和端口;不得改业务实现。 +- 验收:新目录独立启动,231项Python测试、45项Playwright测试、数据库副本和静态资产哈希验证。 +- 回档:本切片建立独立Git提交并推送Gitea。 +- 完整证据:`docs/migration/evidence/slice-00/README.md`。 +- 资产清单:`docs/migration/原版资产清单.json`,388项,0项哈希差异。 + +已完成切片:`slice-01-startup-http-accounts-system`。 + +- 原版基线:提交`4083dce`,即切片00原样副本。 +- 迁移范围:进程入口、应用组装、HTTP传输、账号安全、账号/会员业务、账号/系统设置持久化。 +- 兼容边界:根级`server.py`、`app_config.py`、`security.py`继续保留原导入和命令入口。 +- API与数据库:API/功能注册表哈希一致;原版与副本数据库均为36表、62个schema对象且schema哈希一致。 +- 验收:236项Python测试、5项切片专项测试、45项Playwright测试全部通过;前端运行资产未改动。 +- 回档:标签`xiaobai-preservation-slice-01-20260731`。 +- 完整证据:`docs/migration/evidence/slice-01/README.md`。 + +已完成切片:`slice-02-market-search-charts-data`。 + +- 原版基线:提交`4002f09`,即切片01回档点。 +- 迁移范围:30个公共行情服务方法、11个行情持久化方法及Tushare/iFinD/图表/实时观察实现。 +- 兼容边界:四个根级数据模块保留模块别名;未迁移功能继续使用旧导入且指向同一实现。 +- 等价证明:41个方法AST逐项一致,三个数据文件哈希一致,图表定义AST一致,静态资产哈希一致。 +- 验收:241项Python测试、6项切片源码等价测试、45项Playwright测试及真实服务搜索/详情流程通过。 +- 既存状态:原版和迁移版的实时分时在当前环境均返回相同外部请求失败,不作为迁移回归处理。 +- 回档:标签`xiaobai-preservation-slice-02-20260731`。 +- 完整证据:`docs/migration/evidence/slice-02/README.md`。 + +已完成切片:`slice-03-sentiment-pools-performance`。 + +- 原版基线:提交`a426432`,即切片02回档点。 +- 迁移范围:情绪计算引擎、2个情绪服务方法、6个股池原因与iFinD事件补全方法、2个原因覆盖持久化方法。 +- 兼容边界:根级`sentiment_engine.py`保留同一模块对象别名;股池生成仍使用切片02的原Tushare总览实现。 +- API与数据库:原版`8784`和迁移版`8785`的总览、情绪历史JSON完全一致;两库schema均为62项且哈希一致。 +- 验收:248项Python测试、6项切片源码等价测试、45项Playwright测试及六个真实页面流程通过。 +- 回档:标签`xiaobai-preservation-slice-03-20260731`。 +- 完整证据:`docs/migration/evidence/slice-03/README.md`。 + +已完成切片:`slice-04-ladder-rotation`。 + +- 原版基线:提交`b3555d2`,即切片03回档点。 +- 迁移范围:2个板块轮动服务方法;市场天梯继续使用切片02已归位的原Tushare数据构造实现。 +- 兼容边界:`DashboardService`通过`RotationServiceMixin`保持所有原调用;天梯不制造空服务或第二套计算。 +- API与错误:天梯与9日轮动历史JSON完全一致;成分股两版均返回同一Tushare外部失败语义。 +- 验收:252项Python测试、4项切片源码等价测试、45项Playwright测试及两个真实页面流程通过。 +- 回档:标签`xiaobai-preservation-slice-04-20260731`。 +- 完整证据:`docs/migration/evidence/slice-04/README.md`。 + +已完成切片:`slice-05-auction-themes-popularity-dragon-tiger`。 + +- 原版基线:提交`814e757`,即切片04回档点。 +- 迁移范围:共享市场洞察服务、竞价/题材/人气入口、龙虎榜与游资档案服务、7个相关持久化方法。 +- 兼容边界:根级`market_insights.py`保留同一类对象别名;竞价与人气共用候选热度逻辑,不复制第二套实现。 +- API与数据库:7个真实API逐字段一致,仅排除每次请求必然变化的`request_id`;62个schema对象与5张关键表完全一致。 +- 验收:258项Python测试、6项切片源码等价测试、45项Playwright测试及四个真实页面流程通过。 +- 回档:标签`xiaobai-preservation-slice-05-20260731`。 +- 完整证据:`docs/migration/evidence/slice-05/README.md`。 + +已完成切片:`slice-06-screener-custom-tracking`。 + +- 原版基线:提交`cf2aad2`,即切片05回档点。 +- 迁移范围:完整选股引擎、29套高级策略、策略编译器、13个页面服务方法、25个持久化方法及持续跟踪。 +- 兼容边界:三个根级模块指向正式模块对象;选股引擎保留原版数据客户端依赖,不为通过边界测试改写算法。 +- API与数据库:3个真实API业务JSON一致;62个schema对象和13张关键表逐行一致。 +- 验收:原版231项、迁移版265项Python测试、7项切片源码等价测试、45项Playwright及四个真实工作区通过。 +- 回档:标签`xiaobai-preservation-slice-06-20260731`。 +- 完整证据:`docs/migration/evidence/slice-06/README.md`。 + +已完成切片:`slice-07-mentor-skills-llm-streaming`。 + +- 原版基线:提交`4bab921`,即切片06回档点。 +- 迁移范围:问师Agent、Skill注册表、8个服务方法、5个持久化方法、模型解析、额度、回退、流式累积器和调用审计。 +- 兼容边界:根级`mentor_agent.py`和`llm_stream.py`指向正式模块对象;系统管理继续独占模型池配置。 +- API与数据库:2个真实API完全一致;62个schema对象及5张关键表逐行一致;190个公开Skill文件哈希一致。 +- 验收:原版231项、迁移版273项Python测试、8项切片源码等价测试、45项Playwright及真实问师页面通过。 +- 回档:标签`xiaobai-preservation-slice-07-20260731`。 +- 完整证据:`docs/migration/evidence/slice-07/README.md`。 + +已完成切片:`slice-08-heaven-trend-fortune-heart`。 + +- 原版基线:提交`2919229`,即切片07回档点。 +- 迁移范围:问天Agent、历法/卦象引擎、20个服务方法、5个持久化方法及3个HTTP入口。 +- 兼容边界:根级`heaven_agent.py`和`heaven_engine.py`指向正式模块对象;原动画、DOM、JS与CSS未改动。 +- API与数据库:6个固定输入真实API完全一致;62个schema对象及6张关键表逐行一致。 +- 验收:原版231项、迁移版280项Python测试、7项切片源码等价测试、45项Playwright及1080P三模式动画页面通过。 +- 回档:标签`xiaobai-preservation-slice-08-20260731`。 +- 完整证据:`docs/migration/evidence/slice-08/README.md`。 + +已完成切片:`slice-09-review-watchlist-notes-journal-alerts-assistant`。 + +- 原版基线:提交`b3df070`,即切片08回档点。 +- 迁移范围:复盘助手Agent、5个提醒编排方法、8个复盘编排方法、19个持久化方法及5个HTTP入口。 +- 兼容边界:根级`assistant_agent.py`指向正式模块对象;提醒与交易日志旧服务继续作为唯一底层实现;包导出采用延迟加载以切断初始化循环。 +- API与数据库:5个固定输入真实API完全一致;62个schema对象及8张关键表逐行一致。 +- 验收:原版231项、迁移版287项Python测试、7项切片源码等价测试、45项Playwright及1920×1080会员/非会员真实页面通过。 +- 回档:标签`xiaobai-preservation-slice-09-20260731`。 +- 完整证据:`docs/migration/evidence/slice-09/README.md`。 + +已完成切片:`slice-10-frontend-shell-pages-components-css-mobile`。 + +- 原版基线:提交`38de3de`,即切片09回档点。 +- 迁移范围:完整前端DOM、9,283行运行时、页面脚本、共享脚本、七层CSS、问天加载动画、供应商资产及移动端规则。 +- 兼容边界:运行时只切换静态根目录和资源路径;原DOM、样式、动画及JS源码内容不重写。 +- 源码证明:原`app.js`与全部拆分片段重组后的SHA-256均为`c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6`。 +- API与数据库:21个全站只读API全部一致;62个schema对象和21张关键表逐行一致。 +- 验收:85项前端专项、原版231项、迁移版294项Python测试、45项Playwright(2.3分钟),以及1920×1080日间/夜间、390×844移动端和问天动画真实浏览器差分通过。 +- 验收限制:同主机不同端口共享登录Cookie,双服务比较必须逐服务重新登录;动态动画帧、焦点和状态文字不以截图文件哈希作为唯一标准。 +- 回档:标签`xiaobai-preservation-slice-10-20260731`。 +- 完整证据:`docs/migration/evidence/slice-10/README.md`。 + +已完成切片:`slice-11-uncertain-code-audit-final-acceptance-handoff`。 + +- 原版基线:提交`dec3cd12365df5e7d4c391369f14c457cf56d7d9`,即切片10回档点。 +- 审计范围:`demo_data.py`、旧问天加载动画、5个无引用前端函数及`wencai_saved_queries`兼容责任。 +- 处置:前3类先进入可单项回档的候选试删,并在2026-08-01人工验收后确认废弃; + `wencai_saved_queries`表和方法因旧库兼容与用户隔离继续保留。 +- 保护方式:全部历史前端源码测试统一使用审计白名单比较,只允许登记的原`app.js`行号缺失,其他差异仍会失败。 +- API与数据库:21个全站只读API全部一致;62个schema对象和21张关键表逐行一致。 +- 验收:原版231项、迁移版302项Python测试、24个JavaScript语法检查和45项Playwright通过;桌面日间/夜间、390×844五个移动入口和问天三页真实检查通过。 +- 部署边界:未改正式数据库、`.env`、`8765`、Docker或NAS;原版仍是正式运行基线。 +- 候选回档:标签`xiaobai-preservation-slice-11-candidate-20260731`;最终完成标签 + `xiaobai-preservation-complete-20260801`;试删恢复能力继续由切片10标签保留。 +- 完整证据:`docs/migration/evidence/slice-11/README.md`。 +- 维护交接:`docs/migration/人工维护与本地切换指南.md`。 + +严格完成审计补充: + +- 发现候选`verify_baseline.py`、架构清单和原样资产清单仍带有旧`static/`、候选`docs/`及 + `app/app`路径假设;产品运行不受影响,但人工接管命令不可用,因此属于迁移目标缺口。 +- 修复后统一验证命令检查302项Python测试、两个生成注册表、24个前端脚本、Git空白、SQLite + 完整性和45项Playwright,并在Windows上显式管理8876测试服务器生命周期。 +- 21个固定API使用同一数据库时点重新比较全部一致;数据库62个schema对象和21张关键表一致, + 仅按既有规则排除内置策略启动校准的`updated_at`。 +- 候选自身的16页、64类路由匹配、36张表、数据/LLM/CSS入口和热点文件登记在 + `app/config/architecture-inventory.json`;逐项结论见`completion-audit.md`。 +- 严格审计回档标签为`xiaobai-preservation-slice-11-audit-candidate-20260731`。该标签只代表自动 + 候选;最终人工验收与删除裁决记录在完成标签中。 +- 2026-08-01跨日复验发现原版与候选共用的一项实时详情测试夹具依赖运行日,进入周六后会把 + 非交易日误作预期合并日;两版测试夹具同步固定到明确工作日,产品代码和日期规则未改。 +- 跨日修复后统一验收再次通过302项Python测试、24个JavaScript文件、SQLite完整性和45项 + Playwright;新增候选回档标签`xiaobai-preservation-slice-11-audit-candidate-20260801`。 +- 纯`app/`导出在系统临时目录成功运行统一维护命令:242项候选测试、注册表、24个JavaScript + 文件和SQLite检查通过;正式仓库保真套件为305项Python测试及45项Playwright通过。 +- 日常前端契约不再隐式读取旧`static/app.js`,只有迁移差分断言保留原版依赖;架构热点大小 + 按归一化UTF-8统计,CRLF/LF跨环境结果一致。 +- 切片10集合竞价候选截图实际为登录失效页,已重命名并撤销证明力;九组有效截图像素差异 + 低于动态渲染噪声阈值。2026-08-01用户随后在真实登录状态下逐页浏览并测试全部功能,确认 + 视觉与功能迁移成功;发现的问题几乎都属于原版遗留问题,未发现阻止验收的迁移回归。 + +## CSS核心治理:`styles.css` + +- 治理基线:提交`cc5fb8d`,标签`xiaobai-reduction-14-css-same-file-duplicates-20260802`。 +- 目标:一次性消除基础样式、历史页面样式和多轮覆盖混杂,不把旧债转移到新的补丁文件。 + 共享规则归入`frontend/shared/`,页面规则归入对应`frontend/pages//foundation.css`。 +- 已永久删除:`styles.css`、`renovation.css`、`redesign-v2.css`、`design-system.css`、 + `theme.css`及`pages/heaven/page.css`;没有建立`legacy.css`、`override.css`或`fix.css`。 +- 最终加载契约:`tokens.css`之后只加载9个共享所有者和13个页面所有者,共22个正式CSS; + 不再存在历史后置层。同一`selector + @media/@supports/@scope上下文`只有一个定义和一个 + 文件所有者,页面ID不能跨页面泄漏,未加页面作用域的Shell/控件根选择器只能位于共享层。 +- 规模结果:治理输入为861,341字节、8,569条`selector/context`规则;最终为712,217字节、 + 5,754条规则,净删除149,124字节和2,815条规则。含`tokens.css`的最终源码为47,557个 + 物理行;该数字高于 + 混合压缩格式的旧文件,是因为统一改为一条声明一行,不能作为重复度指标。 +- 临时资产:合并器、旧版对照HTML、旧CSS副本及浏览器临时基线均已删除;历史恢复只依赖 + Git基线和标签,不在生产目录保留第二套CSS。 +- 结构门禁:覆盖唯一加载顺序、历史层不存在、所有者标头、全局选择器/上下文唯一性、 + 页面ID归属、共享根归属、禁用补丁文件名、规则数和体积上限。 +- 浏览器等价:真实`8797`运行页已完成拆分前后4K夜间情绪周期直接视觉对照,结构、图表、 + 表格、颜色和滚动位置一致;现行页面的日间/夜间、1920×1080、3840×2160与390×844 + 由端到端测试覆盖。全站最终视觉仍须用户在真实数据状态下人工验收,不以自动测试代替。 +- 自动验收:统一命令`python tools/verify_baseline.py --e2e`已通过,包括341项单元/契约测试、 + 46项真实浏览器测试、全部JavaScript语法检查、API/架构注册表、数据库完整性及补丁格式检查。 +- 未触碰:业务功能、DOM、JavaScript、数据口径、数据库、LLM、Docker/NAS、`next/`及其 + 冻结状态均未改变。 + +## HTML核心治理:`frontend/index.html` + +- 治理目标:一次性消除16个主页面和1个内部页面集中在入口HTML的问题,不重写页面、 + 不用JavaScript字符串保存DOM,也不保留第二套隐藏页面结构。 +- 机械拆分:原页面连续DOM区间按既有功能所有权归入12个真实`pages//page.html`; + 五类股池共属`pools`,智能选股与策略持续跟踪共属`screener`。Shell、摘要条、状态栏和 + 全局弹窗继续由`index.html`唯一持有。 +- 唯一装配:`index.html`只加载`bootstrap.js`;页面片段路径和既有脚本执行顺序只登记在 + `pages.config.js`。Bootstrap先并行取得静态片段,按原DOM顺序直接插入`.app-main`,再按 + 原顺序加载运行脚本,不增加影响Flex/Grid直接子关系的包装节点。 +- 启动契约:动态脚本并行下载但以`async=false`保持原执行顺序;全部运行脚本执行后发布 + 唯一`runtime-ready`状态。原入口只做一项精确登记的必要调整:若DOMContentLoaded尚未 + 发生则监听一次,若装配完成时文档已就绪则直接初始化,避免异步装配遗漏启动事件。 +- 规模结果:`index.html`由1,908行降为655行;页面结构分布到12个功能片段。HTML总量没有 + 伪装成删除,因为本次治理解决的是所有权集中,而不是删除产品界面。 +- 保真证据:片段重组后的完整页面区域与原版对应82,575个字符逐字符一致;原`app.js` + 除上述精确启动替换外仍通过既有9,283行源码重组保真测试,页面ID、DOM层级、动画与业务 + 实现未被改写。345项Python单元/契约测试和46项Playwright浏览器测试全部通过。 +- 结构门禁:入口不得出现`workspace-view`根节点;每个注册视图必须只存在于一个片段; + 片段禁止脚本;页面ID全局唯一;运行脚本顺序只允许一个注册所有者;业务数据请求继续 + 仅通过`shared/api.js`,Bootstrap只允许读取同源静态片段。 +- 未触碰:CSS视觉规则、业务功能、数据口径、数据库、LLM、Docker/NAS和冻结的`next/`。 + +## 前端启动核心治理:`frontend/app.js` + +- 治理目标:一次性消除入口脚本同时持有应用状态、主题、账户、管理后台、仪表盘、表格、 + 全站反馈以及16页控件事件的问题,不把原单体整体改名转移到另一个大文件。 +- 入口结果:`frontend/app.js`由1,943行降为101行,只保留初始化、认证后启动、初始路由、 + 页面挂载协调和唯一绑定调度;入口内不再定义页面业务事件、共享状态、主题、后台管理、 + 仪表盘或通用表格实现。 +- 共享所有权:状态与DOM句柄归入`shared/context.js`,API/Shell/页面生命周期组装归入 + `shared/application.js`,反馈与动效归入`shared/feedback.js`,行情仪表盘与日期归入 + `shared/dashboard.js`,认证和账户归入`shared/session.js`,系统管理归入`shared/admin.js`, + 主题归入`shared/theme.js`,通用表格归入`shared/table.js`。每项职责只有一个正式所有者, + 没有建立`legacy`、`compat`、`override`或`fix`转存层。 +- 页面所有权:原单一`bindEvents`已删除;12个功能页面在自身`page.js`注册一次性控件绑定, + 公共行情悬浮窗和详情绑定当时归入`pages/market/runtime.js`,后续已按下节治理为七个窄职责文件。`pages/runtime.js`负责防重绑定, + `app.js`不再逐页枚举选择器或事件。 +- 保真边界:除跨页事件绑定函数的结构化拆分外,原业务函数主体按源码范围机械迁移;旧 + 事件注册逐项归入对应所有者。保真测试会精确剥离登记过的页面绑定扩展后再与母版比较, + 不以文件存在或测试自洽代替母版差分。 +- 结构门禁:限制入口不超过120行;禁止状态创建、API/Shell组装、仪表盘、主题、后台和 + 表格实现回流入口;验证每个功能页面具有唯一绑定所有者;验证共享职责只有一个定义文件。 +- 自动验收:348项Python单元/契约测试、全部JavaScript语法检查、API注册表、架构清单、 + SQLite完整性和Git空白检查通过;46项Playwright浏览器测试全部通过(约2.5分钟)。 +- 未触碰:HTML与CSS视觉结果、业务计算、API数据口径、数据库、LLM、Docker/NAS及冻结的 + `next/`均未改变。本轮仍需用户在真实数据与登录状态下做最终人工功能确认。 + +## 行情前端运行时核心治理:`frontend/pages/market/runtime.js` + +- 治理目标:一次性消除行情图表、个股详情、板块/题材/指数详情、悬浮行情、全局搜索、 + 市场宽度和事件绑定集中在一个运行时文件的问题,不建立兼容入口或换名后的新单体。 +- 所有权结果:原`runtime.js`永久删除;现由`breadth.js`、`charts.js`、`entity-detail.js`、 + `stock-detail.js`、`preview.js`、`search.js`和`bindings.js`分别唯一持有七类职责,加载顺序只在 + `pages.config.js`登记。最大文件为`preview.js`的455个物理行,其余均不超过392行。 +- 有效代码审计:55个具名函数全部具有静态消费者,没有把无法证明无用的行情逻辑当作垃圾删除。 + 拆分前工作树为1,392个物理行,拆分后七文件合计1,404行;增加的12行只来自更细的原版源码 + 范围标记和文件边界,不是第二实现、包装层或业务代码膨胀。 +- 保真证据:原9,283行`static/app.js`仍可由当前全部源码范围逐字符重组,现有行情函数主体、 + DOM、Canvas绘制、API路径、事件顺序和错误处理未改写。注册表缓存版本同步提升,避免浏览器 + 刷新后继续加载已删除的旧运行时。 +- 结构门禁:禁止恢复`pages/market/runtime.js`;七个文件必须按固定顺序唯一注册;每类核心 + 函数只能存在于指定所有者;任一市场运行时文件不得超过500个物理行。 +- 自动验收:统一命令`python tools/verify_baseline.py --e2e`通过,包括349项Python单元/契约 + 测试、39个JavaScript语法检查、API/架构注册表、SQLite完整性、Git空白检查和46项真实 + 浏览器测试(约2.3分钟)。 +- 未触碰:视觉样式、页面DOM、后端业务、数据口径、数据库、LLM、Docker/NAS和冻结的`next/`。 + 本轮仍需用户在真实登录与数据状态下做最终人工功能确认。 + +## 智能选股引擎核心治理:`backend/features/screener/engine.py` + +- 治理目标:消除因子目录、外部同步、技术指标、因子构建、公式、阶段识别、选股执行和回测 + 集中在一个引擎文件的问题,同时保留原策略公式、定时任务、API、数据库副作用和前端行为。 +- 所有权结果:`engine.py`缩减为129行兼容门面;真实实现分别由`catalog.py`、`data_sync.py`、 + `indicators.py`、`factors.py`、`formula.py`、`regime.py`、`selection.py`和`backtest.py`唯一持有。 + 领域模块不再反向依赖兼容门面。 +- 规模说明:原单体为2,203行,拆分后的八个所有者与兼容门面合计2,456行;增加的253行来自 + 独立模块导入、类边界和窄委托,不包含第二套策略、因子或算法实现。本轮解决职责集中,未以 + 删除产品公式伪装代码减量。 +- 保真证据:所有迁移方法和辅助函数与原版逐项AST相同;公共`ScreenerEngine`、 + `FactorDataService`、目录常量、公式编译函数及根级兼容导入保持同一对象和原调用契约。 +- 结构门禁:兼容门面不得超过180行;领域模块不得依赖门面;每项计算只允许一个源码所有者; + 禁止重新合并为单体引擎。 +- 自动验收:353项Python测试和46项Playwright浏览器测试通过;架构/API注册表、JavaScript、 + SQLite完整性和Git空白检查通过。用户仍需在真实数据状态下做最终人工功能确认。 + +## Tushare客户端核心治理:`backend/data/providers/tushare_client.py` + +- 治理目标:消除HTTP请求、市场总览、实时宽度、指数、申万行业、通用板块、龙虎榜、个股详情、 + 交易日和涨跌停数据集中在一个Provider文件的问题,不改变方法签名、字段、单位、日期、缓存、 + 异常、降级或数据源语义。 +- 所有权结果:公共`TushareClient`仍是唯一可构造类型,`tushare_client.py`缩减为68行,只保留 + dataclass字段、共享缓存状态和领域Mixin组合。传输、总览、指数、申万行业、板块、龙虎榜、 + 个股、交易日及通用转换分别由九个`tushare_*.py`模块唯一持有。 +- 规模说明:原单体为2,165行,拆分后的领域模块与门面合计2,293行;增加的128行来自独立文件 + 的导入和类声明。最大所有者为644行,没有第二套`TushareClient`或重复方法体;一次性机械 + 拆分脚本已删除。 +- 保真证据:原类全部31个方法、18个顶层辅助函数和11个dataclass/共享缓存字段均与原版逐项 + AST一致;根级兼容模块、`DataGateway`、测试子类及`patch.object(TushareClient, "query")` + 继续指向同一个公共类和异常类型。 +- 结构门禁:门面不得超过100行且不得定义业务方法;任一领域所有者不得超过700行;领域模块 + 不得反向依赖门面;原方法必须完整且不重复地分布在登记所有者中。 +- 自动验收:354项Python测试、46项Playwright浏览器测试、全部JavaScript语法、API/架构注册表、 + SQLite完整性和Git空白检查通过。未修改前端、数据库、正式数据、Docker/NAS或冻结的`next/`; + 用户仍需在真实行情和页面状态下做最终人工功能确认。 + +## 问天服务核心治理:`backend/features/heaven/service.py` + +- 治理目标:消除手工六爻补录、趋势推演、市场上下文采集、观气/观心记录与LLM解读集中在一个问天服务文件的问题,不改变API、参数、返回字段、计算口径、数据库副作用、模型调用或前端行为。 +- 所有权结果:`service.py`由1,304行缩减为15行无方法组合门面;手工数据校验与六爻安全门唯一归属`manual.py`,趋势组装、市场模式、来源及质量校验唯一归属`trend.py`,个股/指数/行业上下文唯一归属`market_context.py`,个人气场、卦象、历史记录及智能解读唯一归属`readings.py`。 +- 规模说明:四个实现所有者分别为412、358、338、220行,连同15行门面合计1,343行;比原文件增加39行,全部来自四组独立导入和类边界,没有委托包装、第二实现或兼容转存层。一次性机械拆分脚本已删除。 +- 保真证据:20个问天服务方法逐项与原版AST比较;现有有意适配的`_heaven_reading_identity`保持当前生效实现。测试同时强制每个方法只归属一个文件、门面不得定义服务方法、领域模块不得反向依赖门面、每个所有者不得超过500行。 +- 自动验收:66项问天专项测试、354项全量Python测试及统一`python tools/verify_baseline.py --e2e`验收通过;后者覆盖JavaScript语法、API/架构注册表、SQLite完整性和46项Playwright浏览器流程。`git diff --check`无空白错误。 +- 未触碰:前端DOM/CSS/动画、HTTP路由、数据表与正式数据、LLM协议与提示词、Docker/NAS及冻结的`next/`均未改变;仍需用户在真实观势、观气、观心流程中做最终人工确认。 + +## 市场洞察核心治理:`backend/features/market/insights.py` + +- 治理目标:消除共享交易上下文、集合竞价评分与数据准备、竞价结果编排、题材库和人气热榜集中在一个市场洞察文件的问题,不改变API、参数、返回字段、评分、候选范围、缓存、数据库副作用或数据源降级语义。 +- 所有权结果:`insights.py`由1,307行缩减为45行无方法公共门面;构造与共享上下文唯一归属`insights_context.py`,竞价评分与候选构造唯一归属`insights_auction_scoring.py`,竞价时段/成交额/自选/动态快照唯一归属`insights_auction_data.py`,竞价中心编排唯一归属`insights_auction.py`,题材库与详情唯一归属`insights_themes.py`,人气榜唯一归属`insights_popularity.py`。 +- 规模说明:六个实现所有者分别为84、355、318、221、222、156行,连同45行门面合计1,401行;比原文件增加94行,全部来自独立导入、类边界和公共门面的历史模块级兼容导出,没有委托包装、第二实现或业务代码复制。一次性机械拆分脚本已删除。 +- 保真证据:原类全部22个方法逐项与原版AST比较,`_display_date`辅助函数保持原AST,公共`_number`仍指向统一数值标准化函数。测试强制每个方法只归属一个文件、门面不得定义业务方法、领域模块不得反向依赖门面、任一所有者不得超过400行。 +- 自动验收:48项市场洞察专项及前端契约测试、354项全量Python测试和统一`python tools/verify_baseline.py --e2e`验收通过;后者覆盖JavaScript语法、API/架构注册表、SQLite完整性和46项Playwright浏览器流程。`git diff --check`无空白错误。 +- 未触碰:集合竞价、题材库、人气榜的前端DOM/CSS及交互,HTTP路由、数据库结构与正式数据、数据源策略、Docker/NAS及冻结的`next/`均未改变;仍需用户在真实行情状态下做最终人工确认。 + +## 应用组合与HTTP协调核心治理:`backend/application.py` + +- 治理目标:消除系统配置、账户委托、后台任务生命周期、74条API的跨领域解析与响应以及应用依赖装配集中在一个文件的问题,同时保持公共`DashboardService`、`RequestHandler`、`SERVICE`、API注册表、鉴权顺序、异常状态码和启动方式不变。 +- 所有权结果:`application.py`由1,092行缩减为178行,只保留依赖导入、服务/请求处理器组合、当前构造函数和进程级服务实例。系统配置归属`features/system/service.py`,账户桥接归属`features/accounts/application.py`,任务生命周期归属`jobs/service.py`;公共鉴权、命名POST分派、feature遍历、静态回退和404归属`http/dispatch.py`;15类端点解析与响应分别归属对应`features//routes.py`。 +- 规模说明:组合根178行、统一分派器115行、三个应用服务所有者合计366行、15个feature路由所有者合计716行,总计1,375行,比原文件增加283行。增加部分来自19个独立模块的必要导入与类边界、各feature处理完成标志和统一分派循环;没有复制业务计算、保留第二套路由或增加兼容包装实现。物理行数增加,单文件职责和跨领域修改范围实质下降,此项不能表述为总代码减少。 +- 路由保真:重新生成的API仍为74条,方法、路径、精确/正则匹配、功能归属和访问级别与拆分前逐项一致,`config/api.config.json`保持原SHA-256哈希。公共POST在认证前分派;受保护请求仍按认证、CSRF、权限的原顺序执行;静态页面仍绕过API权限检查。 +- 结构门禁:`application.py`不得超过220行且仅允许`DashboardService.__init__`;`RequestHandler`不得直接定义HTTP方法;`http/dispatch.py`不得超过150行;每个feature路由文件不得超过120行、不得反向依赖`backend.application`或全局`SERVICE`;27个应用服务方法必须唯一归属于系统、账户或任务所有者。 +- 自动验收:356项全量Python测试和统一`python tools/verify_baseline.py --e2e`验收通过;后者覆盖JavaScript语法、API/架构注册表、SQLite完整性和46项Playwright浏览器流程。`git diff --check`无空白错误,一次性机械拆分脚本已删除。 +- 未触碰:前端DOM/CSS/动画、API数据字段、业务计算、数据库结构与正式数据、数据源和LLM策略、Docker/NAS及冻结的`next/`均未改变;仍需用户在真实登录和数据状态下做最终人工确认。 + +## 历史保真审计脚手架治理 + +- 治理目标:删除依靠复制数百行旧CSS片段、旧`app.js`行号和重组哈希证明保真的高维护机制,避免已退役的单体源码继续成为隐藏的第二套实现。 +- 删除结果:`tests/preservation_helpers.py`由600余行降至115行,只保留当前页面/脚本装配、必要哈希和AST契约;生产JavaScript中的源码范围标记全部删除;一次性`tools/split_frontend_runtime.py`退役。 +- 替代约束:当前脚本注册表和顺序、唯一符号所有者、页面DOM、API、JavaScript语法、CSS所有权、数据库完整性及Playwright交互成为持续维护边界。新增结构测试禁止历史标记、CSS回放表和旧拆分工具重新出现。 +- 历史证据:`docs/migration/evidence/slice-10/frontend-source-map.json`继续保留,只用于说明当时如何完成机械拆分,不参与应用启动、日常测试或未来功能开发。 +- 自动验收:356项Python测试通过;统一`py tools/verify_baseline.py --e2e`通过全部当前JavaScript语法、74条API注册表、架构清单、SQLite完整性和46项Playwright浏览器流程;`git diff --check`无空白错误。 +- 未触碰:业务计算、API字段、DOM结构、CSS规则、动画、数据源、LLM、数据库内容、Docker/NAS及冻结的`next/`均未改变;生产JavaScript仅删除无运行效果的审计注释。 + +## 根目录兼容转发与运行产物治理 + +- 治理目标:解决`app/`根目录散落19个旧导入转发文件,以及日志、Python缓存和浏览器测试产物 + 分散在源码目录的问题;不改变业务实现、导入对象身份、API、数据库、前端或启动行为。 +- 转发层删除:根目录Python文件由23个降为4个,只保留`api_access.py`、`database.py`、 + `server.py`和`sync_data.py`四个真实入口。19个兼容模块全部删除,生产代码和普通测试改为直接 + 导入`backend/`内的唯一实现;结构测试禁止这些旧模块或旧导入路径重新出现。 +- 唯一实现修正:`backend/features/screener/repository.py`中仅剩的一处运行时旧路径回退已删除, + 直接使用该模块原本已经导入的情绪领域实现,没有增加新的门面、包装或第二套业务逻辑。 +- 运行产物边界:新增`runtime/`作为唯一运行产物目录,日志统一进入`runtime/logs/`,Python字节码 + 缓存进入`runtime/cache/python/`,Playwright结果进入`runtime/test-results/`;项目根目录不再生成 + `*.log`。`tools/start_local.ps1`统一负责本地隐藏启动、PID记录、缓存和日志落点。 +- 现有产物整理:历史8785/8797日志和浏览器测试结果已移入`runtime/`,源码树中32个旧 + `__pycache__`目录在确认路径均位于`app/`后清除。`runtime/.gitignore`只保留目录边界,不提交 + 运行产物。 +- 自动验收:352项Python测试和46项Playwright浏览器测试全部通过;74条API注册表、架构清单、 + 全部JavaScript语法、SQLite完整性及`git diff --check`均通过。测试数量减少来自删除只证明旧别名 + 存在的兼容测试,新增结构门禁继续验证19个旧文件不得回归。 +- 未触碰:页面DOM/CSS/视觉/动画、API协议、业务计算、正式数据、数据库结构、数据源、LLM、 + Docker/NAS及冻结的`next/`均未改变。提交与推送仍等待用户明确要求。 + +## 独立化收口 + +- 正式边界:`app/`成为唯一产品源码和运行目录;生产代码、测试选择、部署和维护不再读取父目录。 +- 文档归位:完整产品规格、治理记录、迁移账本和证据整体进入`app/docs/`;新增当前维护指南与 + 文档索引,历史双版本切换指南明确标记为历史资料。 +- 测试收口:10个只比较父目录旧源码的`test_preservation_*`及旧比较辅助模块退役;当前页面与 + 脚本装配辅助函数缩减为独立的`tests/frontend_test_helpers.py`。统一验收始终运行全部当前测试, + 不再根据父目录文件是否存在静默改变测试集合。 +- 工具收口:5个只服务迁移复制和新旧差分的脚本退出活动`tools/`;迁移方法和结果继续由Git历史 + 与`docs/migration/evidence/`保存。 +- 数据边界:`app/data/review.db`是唯一正式数据库;外层旧库最后写入停留在2026-08-01。 + `.env`、数据库、私有Skill和`runtime/`均保持Git忽略,未进入提交。 +- 独立扫描:活动源码、测试、工具和部署文档对`ROOT.parent`、`ORIGINAL_ROOT`、父级`static`及 + 迁移比较工具的运行引用为0;历史文档中的旧路径仅作审计记录。 +- 自动验收:289项Python测试、39个JavaScript文件语法、74条API、架构注册表、435MB SQLite + 完整性及46项Playwright浏览器测试全部通过;`git diff --check`无空白错误。 +- 后续边界:外层旧程序与失败的`next/`只待本回档点推送后清理;清理必须使用独立提交,不与 + 产品代码修改混合。Docker/NAS切换仍需用户单独批准。 + +## 决策记录 + +| 日期 | 决策 | 原因 | +|---|---|---| +| 2026-07-30 | 原版运行行为优先,规格书只用于盘点 | 防止再次依据文字重新开发 | +| 2026-07-30 | 不使用`next/`作为后续迁移起点 | 用户确认其视觉、布局和基础功能不可用 | +| 2026-07-30 | 目标结构确认前不创建业务目录 | 防止目录先行后再次补写功能 | +| 2026-07-30 | 目标目录确定为`app/` | 使用长期正式名称,不再建立新的版本式重写目录 | +| 2026-07-30 | 先建立原样可运行副本,再迁移目录职责 | 保证整理的是原件,而不是依据规格书重新实现 | +| 2026-07-30 | 不确定代码进入待删账本并延迟试删 | 删除必须能够单独回档并经自动与人工验收 | +| 2026-08-03 | `app/`成为唯一正式源码边界 | 用户确认结构重铸与迁移目标基本完成并要求独立化收口 | +| 2026-08-03 | 迁移比较脚手架退出日常测试 | 父目录删除后测试集合必须保持完整且确定,不能静默跳过 | + +## 恢复工作检查 + +- [x] 已阅读`AGENTS.md`与保真迁移总纲。 +- [x] 已读取状态JSON和本账本最后一项。 +- [x] 已确认Git工作区和基线提交。 +- [x] 已确认没有修改`next/`或正式数据。 +- [x] 已说明当前切片及新旧等价证据。 +- [x] 已在编辑前确认没有未关闭差异。 diff --git a/docs/migration/原版保真迁移总纲.md b/docs/migration/原版保真迁移总纲.md new file mode 100644 index 0000000..ecab050 --- /dev/null +++ b/docs/migration/原版保真迁移总纲.md @@ -0,0 +1,128 @@ +# 小白复盘原版保真迁移总纲 + +> 状态:正式迁移 +> 建立日期:2026-07-30 +> 迁移性质:保行为、保视觉、保数据语义的源代码整理 + +## 1. 唯一目标 + +以当前可运行原版`webapp`为唯一母版,在用户批准的`app/`目录中建立更容易检索、理解和人工维护的 +代码结构。迁移后的系统必须继续使用原版已经验收的功能、视觉、布局、动画、计算逻辑和交互, +不得依据说明文字重新开发一个相似产品。 + +本次工作相当于把原文件柜中的有效原件逐项分类搬入新文件柜,而不是重新制作原件。 + +## 2. 事实裁决顺序 + +发生不一致时按以下顺序处理: + +1. 用户在当前或后续对话中的明确决定。 +2. 原版在相同代码、数据、账号、配置、日期、主题和视口下的真实运行行为。 +3. 原版源码、数据库结构、静态资产和现有测试共同证明的行为。 +4. 《小白复盘完整产品规格说明书》用于盘点和解释,不得自行覆盖原版行为。 +5. 无法确定时记录为待裁决,保持原状,不推测、不补全。 + +只有用户明确指出原版是Bug或要求改变时,才允许产生用户可观察差异,并必须单独记录。 + +## 3. 必须保持不变 + +- 全部页面、入口、功能和细节能力。 +- PC与移动端布局、尺寸、字体、颜色、间距、滚动和响应式行为。 +- 日间、夜间、加载、空、错误、禁用、悬停、选中和完成状态。 +- 动画素材、形态、时序、过场、循环、静音和减少动态效果行为。 +- API路径、请求、响应、错误语义和流式传输行为。 +- 数据来源职责、日期、单位、复权、缺失、覆盖率、新鲜度和降级规则。 +- 权限、会员、管理员标识、账户隔离和私有数据边界。 +- 情绪、竞价、股池、选股、问天及统计计算结果。 +- 数据库现有记录、唯一约束、历史兼容和后台任务语义。 + +## 4. 允许与禁止 + +允许: + +- 移动文件并调整导入路径。 +- 将巨型文件按已经存在的职责拆分。 +- 抽出实际重复且行为相同的实现,让原调用方指向唯一实现。 +- 为原行为增加刻画测试、API快照、数据库对比和视觉回归。 +- 删除已证明无引用、无运行路径、无视觉影响、无数据兼容责任的代码。 + +禁止: + +- 更换前端框架、后端框架、数据库或主要技术栈。 +- 重写已经存在的页面、样式、动画、公式或数据流程。 +- 以新的设计令牌、组件库或架构偏好改变最终视觉。 +- 先建立空架构,再依据规格书补写功能。 +- 以“更合理”为由修复未被用户确认的原版行为。 +- 复制`next/`中的产品实现进入新的迁移目录。 +- 为追求行数、文件数或测试数量而删除有效代码或制造空抽象。 + +## 5. 迁移单位 + +代码不能像独立照片一样任意逐文件搬运。每次迁移一个完整纵向切片: + +```text +用户入口 -> 页面结构 -> 样式与动画 -> 前端状态 -> API -> 业务计算 -> 数据库/外部数据 +``` + +切片内部可以先原样复制,再在保持输出不变的前提下拆分。不得只搬页面而稍后重写接口,也不得先 +重建全部后端再补前端。 + +## 6. 固定工作流 + +1. 冻结原版基线提交,使用数据副本,不写正式数据。 +2. 建立资产清单和依赖图,逐项标记保留、移动、合并、待定或确认废弃。 +3. 先规划目标目录职责;未确认前不建立业务代码。 +4. 为待迁移切片记录原版API、数据库副作用、页面状态、截图和交互流程。 +5. 从原版复制对应实现和资产,只调整迁移所必需的路径与依赖。 +6. 对新旧版本执行同输入差异测试,结果不等价则回退本切片。 +7. 等价后才允许拆分或去重;每次拆分再次执行同一组差异测试。 +8. 更新迁移账本、状态文件和Git回档点,再进入下一个切片。 +9. 所有切片完成后执行全量并行验收,用户确认前不切换部署。 + +## 7. 等价证据 + +每个切片至少同时具备: + +| 证据 | 要求 | +|---|---| +| 源码映射 | 原文件、符号和资产到新位置的逐项记录 | +| API差异 | 同请求的状态码、字段、值、顺序和错误一致 | +| 数据库差异 | 同操作的新增、修改、删除和事务结果一致 | +| 计算差异 | 固定输入得到逐字段相同结果 | +| 页面差异 | 同数据、主题和视口的截图及结构比较 | +| 交互差异 | 点击、键盘、滚动、弹窗、动画和刷新流程一致 | +| 人工确认 | 用户确认视觉与使用感受没有偏差 | + +新版本自身的单元测试只能作为辅助,不能代替新旧差异证据。 + +## 8. 删除规则 + +任何代码只有同时满足以下条件才可不迁移或删除: + +1. 静态引用和动态注册扫描均无消费者。 +2. 运行覆盖和真实浏览器流程未经过该路径。 +3. 不承担数据库迁移、历史兼容、配置读取或资源加载责任。 +4. 删除后原版与迁移版的全量差异测试仍一致。 +5. 迁移账本记录理由、证据和恢复提交。 + +条件不足时标记`待定`并保留,不能凭代码外观判断。 + +## 9. 上下文恢复协议 + +每次新任务、上下文压缩或执行中断后,必须先完成: + +1. 读取仓库根目录`AGENTS.md`。 +2. 读取本总纲、`保真迁移状态.json`及迁移账本。 +3. 确认`next/`仍处于失败冻结状态。 +4. 检查Git状态、当前基线提交和最后回档点。 +5. 查看正在迁移切片的原版证据与未关闭差异。 +6. 在继续编辑前向用户简述当前阶段、硬约束和下一步。 + +不得根据聊天摘要重新发明阶段、技术栈或验收口径。 + +## 10. 当前边界 + +- `next/`已失败冻结,不是迁移起点。 +- 新目录名称、目标结构和迁移顺序已于2026-07-30获得用户确认。 +- 第一切片必须先建立原样可运行副本,不允许直接开始重新实现或视觉重构。 +- 原版保持唯一可运行产品,不执行Docker切换或数据清理。 diff --git a/docs/migration/原版资产清单.json b/docs/migration/原版资产清单.json new file mode 100644 index 0000000..6c2f0c5 --- /dev/null +++ b/docs/migration/原版资产清单.json @@ -0,0 +1,3124 @@ +{ + "schema_version": 1, + "generated_at": "2026-07-30T23:50:41+08:00", + "source_commit": "41329943c4878fc09ed82ec376eb93ab151e4092", + "source_root": ".", + "target_root": "app", + "excluded": [ + "next/", + "data/review.db and SQLite sidecars", + "data/private-mentor-skills/", + ".env", + "node_modules/", + "logs, caches and generated test results" + ], + "asset_count": 388, + "mismatch_count": 0, + "mismatches": [], + "assets": [ + { + "source": ".dockerignore", + "target": "app/.dockerignore", + "bytes": 219, + "sha256": "230cd9e5af6325f17eecc8b5ca6c712a9c1bd9d620b433491278667e749fba89", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": ".env.example", + "target": "app/.env.example", + "bytes": 970, + "sha256": "fe631a02f1045a425d8010ee3f2a5daed1fc8f7ade6167462542b6e867ec927b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": ".gitignore", + "target": "app/.gitignore", + "bytes": 337, + "sha256": "ca86e6925e5a6461648bf326fd783fe5ecc582b598d985829c83fee5684ab0f8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "ARCHITECTURE.md", + "target": "app/ARCHITECTURE.md", + "bytes": 2136, + "sha256": "acb72a863c6c4399708f2274efb130be5c0fa8ecb1b98c1699ec426c8b0a0476", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "DOCKER_DEPLOY.md", + "target": "app/DOCKER_DEPLOY.md", + "bytes": 7720, + "sha256": "776554204f9141abb000cafc525db3c1e593f831a61ab856fd43655ce79c239c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "Dockerfile", + "target": "app/Dockerfile", + "bytes": 1052, + "sha256": "ef7d39e102adccd4b98a590f956e1df0da3aa6c32f1a4244d82610359682b08a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "README.md", + "target": "app/README.md", + "bytes": 7242, + "sha256": "aa6ba22255e38515d8ab74985f8f1c13dd0fc8746561081baea8b71e4f0ae719", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "THIRD_PARTY_NOTICES.md", + "target": "app/THIRD_PARTY_NOTICES.md", + "bytes": 3468, + "sha256": "eaea9b91da8005c358460d4265091e3567a81d3438a2e0905911f2e96960608f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "advanced_strategies.py", + "target": "app/advanced_strategies.py", + "bytes": 24071, + "sha256": "1ff016053040a7f50e0b4cc408aa8b8914a517df36c8e851acab2a258d9c721a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "alert_service.py", + "target": "app/alert_service.py", + "bytes": 85, + "sha256": "0da2bd5cd9849f5b10cabc27b1ba8519df1ad35a71d4301191b0f1e1d59948f8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "api_access.py", + "target": "app/api_access.py", + "bytes": 415, + "sha256": "0bdc0587af5227fa27df1fd88e5873f21811fc02cdc3b9f7d79870da414593d5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "app_config.py", + "target": "app/app_config.py", + "bytes": 4253, + "sha256": "db6fc5f3908188ac45e00748e110803a1c84b824a7a468c983c0ae62d466506e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "assistant_agent.py", + "target": "app/assistant_agent.py", + "bytes": 3800, + "sha256": "f15909d0ac458fd4f139817c216616fce79a9887a3ee204999d881a4c0b7864c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/__init__.py", + "target": "app/backend/__init__.py", + "bytes": 66, + "sha256": "69dc41de4c00462e70b3122f0903088aa9ada7cfcfa82c7cd755ab84218e4923", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/bootstrap/__init__.py", + "target": "app/backend/bootstrap/__init__.py", + "bytes": 264, + "sha256": "029186d951646a1aeafbd507ce3f84a09ae0a9949322add1dc415edc345592e7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/bootstrap/container.py", + "target": "app/backend/bootstrap/container.py", + "bytes": 2351, + "sha256": "07ae53f271c7ba4d325afeda39a2bc16eb7d32f6a2e75a0c7f65d1d3572f95ca", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/bootstrap/settings.py", + "target": "app/backend/bootstrap/settings.py", + "bytes": 2021, + "sha256": "53daa80401d5da3c11b7249677d5ac18da5da8435dd244411d0861700e6d1ef1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/__init__.py", + "target": "app/backend/data/__init__.py", + "bytes": 392, + "sha256": "38e69d6d4064186f10354e9a304b7ab1bb320e33a8dd17ecffef9651989f3d5c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/contracts.py", + "target": "app/backend/data/contracts.py", + "bytes": 554, + "sha256": "4ad31091e938e63e450e585abeb089dc1084f47fbf12e8b4c16a1d3e00ada440", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/gateway.py", + "target": "app/backend/data/gateway.py", + "bytes": 2886, + "sha256": "3f40d213e628378ddff568d2d09af01d38d99cf2e8d6ff1d026651d7581afdde", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/policy.py", + "target": "app/backend/data/policy.py", + "bytes": 2743, + "sha256": "0805ccff95297601538718f619ef6b2a60f4007d8444cf79537f5a98c6dcbea3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/providers/__init__.py", + "target": "app/backend/data/providers/__init__.py", + "bytes": 118, + "sha256": "6ef39fc5ef59644d6cf341d73a637796caa6bd4f7263ade491fa5bbf46dda9bf", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/providers/ifind.py", + "target": "app/backend/data/providers/ifind.py", + "bytes": 335, + "sha256": "a7a54c9615e9a7c7aea0e6c2ee5ab5e1e77fb49088fd203eead0582fc8948193", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/providers/tushare.py", + "target": "app/backend/data/providers/tushare.py", + "bytes": 513, + "sha256": "c30cd00bb0f1edbd01a793ba3126eeda6625169d6bf39af4403f9158b7aa3510", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/data/quality.py", + "target": "app/backend/data/quality.py", + "bytes": 7390, + "sha256": "3e77a94f06522ee7be69cca0c6c6638a5b65d328cefe5eadd91372128c17a081", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/__init__.py", + "target": "app/backend/database/__init__.py", + "bytes": 297, + "sha256": "ddab1f010e11ab8919d61228aacc2f981251c5ad8a9c9d51ebd2fcf782fd58d8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/connection.py", + "target": "app/backend/database/connection.py", + "bytes": 952, + "sha256": "26b54bac0c28a09d2177c5fef96413157d10c6a7d8428008df1329e3dccdc7dc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/migrations/__init__.py", + "target": "app/backend/database/migrations/__init__.py", + "bytes": 385, + "sha256": "75ee014cf939f853d118ac4b6a8c4d0e2edc45de891fc74e69ca5a040368d426", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/migrations/m0001_adopt_legacy.py", + "target": "app/backend/database/migrations/m0001_adopt_legacy.py", + "bytes": 996, + "sha256": "ed8d2de1fbbf55ba94ab8164a760a559e252d843338e523032827af9db96afbd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/migrations/m0002_job_runs.py", + "target": "app/backend/database/migrations/m0002_job_runs.py", + "bytes": 1385, + "sha256": "aff3a0ea344c3e0486cbfa2d4412495df84056934909adcd55f9f5098fbb37e0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/migrations/m0003_llm_audit.py", + "target": "app/backend/database/migrations/m0003_llm_audit.py", + "bytes": 965, + "sha256": "b67b751e280cf5ac74bcdda2783fadf665b24e9875ff8fa125e75ba091e821f6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/migrations/runner.py", + "target": "app/backend/database/migrations/runner.py", + "bytes": 3321, + "sha256": "f7852c1fb60a7c20bfdb7936d8da20c193e0eda1c6bd4ffc8535068b7b9cf2c9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/repositories/__init__.py", + "target": "app/backend/database/repositories/__init__.py", + "bytes": 567, + "sha256": "df670b3230a0e07d8ef93372b2d9288137f11e112fb7f316e14efd0aefc0bc18", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/repositories/ports.py", + "target": "app/backend/database/repositories/ports.py", + "bytes": 1714, + "sha256": "38a12a0e948527d45817c6da700a56159f2257dd38bec291f0dbf888985dcec9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/database/repositories/sqlite.py", + "target": "app/backend/database/repositories/sqlite.py", + "bytes": 3865, + "sha256": "dc3ab283514e9cc9ff3196394091a05ad68f9a4fc0576a12daa10887ce9efc77", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/__init__.py", + "target": "app/backend/features/__init__.py", + "bytes": 42, + "sha256": "249745623a86d1c73442579db98eb344089f0467566522d53953d7d26e013693", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/alerts/__init__.py", + "target": "app/backend/features/alerts/__init__.py", + "bytes": 62, + "sha256": "d56494519b770e53eec0e382d7d2c2f2d0f16d5687977c5576a3bf8e031eed8d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/alerts/service.py", + "target": "app/backend/features/alerts/service.py", + "bytes": 4034, + "sha256": "2a86ad62f7c41d9213f8e593c599137864fd7e4b20ef1dd6daa92c5e88a3fc42", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/review/__init__.py", + "target": "app/backend/features/review/__init__.py", + "bytes": 136, + "sha256": "c909a3bc99df5603ef76ee5e9afa0ea485e6f592b85774216222f595c96e0434", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/review/trade_journal.py", + "target": "app/backend/features/review/trade_journal.py", + "bytes": 5154, + "sha256": "e9284031d32a49cf3a1ac1a077a4ac21279bb1f6c90347dd08f1f734c6d6dc47", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/screener/__init__.py", + "target": "app/backend/features/screener/__init__.py", + "bytes": 85, + "sha256": "fb59da8f630d23fc4c93e47110cd7527a42d024b8127bc2c1f70aee7f2d5f2ce", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/features/screener/tracking.py", + "target": "app/backend/features/screener/tracking.py", + "bytes": 5433, + "sha256": "bd2c556cd711cb46158637228a74b9719b0b17bd01aafa09e505dcaa3ccea6f8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/http/__init__.py", + "target": "app/backend/http/__init__.py", + "bytes": 295, + "sha256": "c36c4e75ccd7e2ffd1e8c5b7ca6c527d40ff43655f4e05b0a1a7f5a646eb7115", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/http/context.py", + "target": "app/backend/http/context.py", + "bytes": 284, + "sha256": "daf0ef3d1676924402117682a88f9740e36cc14e964c03728f0634cddfb1fda4", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/http/errors.py", + "target": "app/backend/http/errors.py", + "bytes": 973, + "sha256": "55d9de615eae59279ba2c803c0a59302a87c46a132463a6c0857ef63dedd5cae", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/http/router.py", + "target": "app/backend/http/router.py", + "bytes": 2582, + "sha256": "ff32a18d94b3ab541e9b2fd9aa0770692d1238eae08d4884a0261c783e2299c6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/jobs/__init__.py", + "target": "app/backend/jobs/__init__.py", + "bytes": 227, + "sha256": "5f420b83fd39c384b890884d6a7c05f5fb2f63ebc6225a4ecae8d8408438cbc5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/jobs/registry.py", + "target": "app/backend/jobs/registry.py", + "bytes": 1865, + "sha256": "51121fdbc765a2a0ec67fb2aeaef839087b817e7111e13f65da4dcff9ceed29f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/jobs/repository.py", + "target": "app/backend/jobs/repository.py", + "bytes": 3221, + "sha256": "497c7f5883e504a78374b1fdf8690ef64f1d217fd115156c58f76201ac8c559d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/jobs/runner.py", + "target": "app/backend/jobs/runner.py", + "bytes": 4415, + "sha256": "1a6015fa52b2f8f483016c994d39ad2f2c2e4b8c00e8998fe17f69e4514655fe", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/llm/__init__.py", + "target": "app/backend/llm/__init__.py", + "bytes": 230, + "sha256": "1a16a907d571eb36006d753739cf590add12576d97b91ad727197e59dce8f6ce", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "backend/llm/gateway.py", + "target": "app/backend/llm/gateway.py", + "bytes": 8404, + "sha256": "91cf3eae73451cb5a1d9fd22419a118ab6b2d2979cfe78cbaedc479c7b521d55", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "chart_data_provider.py", + "target": "app/chart_data_provider.py", + "bytes": 19518, + "sha256": "64a132efe600527d600f22eb655620b2a3ec0bdb6f6514efa93d697bebf6545f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "compose.yaml", + "target": "app/compose.yaml", + "bytes": 765, + "sha256": "601cdbd18b86eb6fedf5f88d57bc49eac3a1bad7f6c5e77344c2d6db4cd0c7fd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/README.md", + "target": "app/config/README.md", + "bytes": 1270, + "sha256": "f2f03f2f510430e96cd53a9ebc2ce13d0d3133c5287bd2054c29fc3adb9858f6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/api.config.json", + "target": "app/config/api.config.json", + "bytes": 11980, + "sha256": "328d31b3ce30028c55e675735b64d93d7a75185b4e6cbe6404ea3c3954e2e5c0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/data-fields.config.json", + "target": "app/config/data-fields.config.json", + "bytes": 4788, + "sha256": "bf227b9adfa97f3beb14e6819dd0cb62df3b14b535104debe7b27a6845ee7596", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/data-quality.config.json", + "target": "app/config/data-quality.config.json", + "bytes": 3960, + "sha256": "6871daef7457c6315b230c5d1d95609ce314d57021e3b8d7e9d24e778986fee5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/features.config.json", + "target": "app/config/features.config.json", + "bytes": 2421, + "sha256": "2996c83e3ac22da068e37cad51821e872e0ca6245b191751ab0298a9c6572fc1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/jobs.config.json", + "target": "app/config/jobs.config.json", + "bytes": 1103, + "sha256": "666a3b19b2f1bb447f20ff21ce54efac607772aea68973b420842ddda11bf6fe", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "config/pages.config.json", + "target": "app/config/pages.config.json", + "bytes": 3136, + "sha256": "9c5db4d15c3a8de20fe6de92e506f17367a2c58e17795887712d5d57381e2340", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "database.py", + "target": "app/database.py", + "bytes": 121546, + "sha256": "c288aa49fc1cf7917653a4e083c19e4ea1d576f12f1f9aece6045b7ada999821", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "demo_data.py", + "target": "app/demo_data.py", + "bytes": 17182, + "sha256": "49ed0c838e3012090888779504920bc96e03843cce4c2748c7d8f112747d2608", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "heaven_agent.py", + "target": "app/heaven_agent.py", + "bytes": 7088, + "sha256": "9395a18877ae9484a2f8688accaa5d16ba91aa1e81cda0fcfe05d5fb2a12377c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "heaven_engine.py", + "target": "app/heaven_engine.py", + "bytes": 51692, + "sha256": "f0225c01f1c70c9e8ac90b7b1f1c5d2a72375943615dad808be0b6e4a57af3b2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "ifind_client.py", + "target": "app/ifind_client.py", + "bytes": 14265, + "sha256": "ab52168d029806906a35bab4acda38e781f690c2dd6178154cda6da11f7d9067", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "llm_strategy.py", + "target": "app/llm_strategy.py", + "bytes": 5184, + "sha256": "f49cd6fed3c3b46e709bfdd7b5d996354401d4c132d24b203520c8bbc468cac0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "llm_stream.py", + "target": "app/llm_stream.py", + "bytes": 1313, + "sha256": "5d5ebc1c87f60bb318179c6209393b09591b8649d7c0c7d1b45d73ad5d427ddb", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "market_insights.py", + "target": "app/market_insights.py", + "bytes": 58066, + "sha256": "1ebf176ca1722cf82551538a23331b240f9c37208379ed0fc26f9a01ab06bf4f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "mentor_agent.py", + "target": "app/mentor_agent.py", + "bytes": 12450, + "sha256": "004fc49b2e5c380f9aa5a228b65a904236d2b611e38421d0d64aa723500c758c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "package-lock.json", + "target": "app/package-lock.json", + "bytes": 2197, + "sha256": "902f01c525c3d1a6846589fce88aef58aa53b8a7a630b5a0d2d733b9f57341a7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "package.json", + "target": "app/package.json", + "bytes": 170, + "sha256": "44ea3af86defaa076e9d2ab5486b13032b224c0db525b774797fc21fff082afb", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "playwright.config.js", + "target": "app/playwright.config.js", + "bytes": 538, + "sha256": "3519d87fd12d41351452d23fa1b106f45f2f1f4e60f036d8cbffb20fa9d4e6fd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "realtime_aggregator.py", + "target": "app/realtime_aggregator.py", + "bytes": 17288, + "sha256": "d6085e3787f1b25a096059484149d484946a2f3726e3cbea426d292d8f732d96", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "requirements.txt", + "target": "app/requirements.txt", + "bytes": 21, + "sha256": "d5b937414245e4fb32db031c55333d8b10144cdde9e4b9ec2f4574a887eb9ec9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "screener.py", + "target": "app/screener.py", + "bytes": 108535, + "sha256": "0e3964a9ed339020b8b192e14a6f711cd09f937a940bf9ce2a4b5c29fdf7f6da", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "security.py", + "target": "app/security.py", + "bytes": 2224, + "sha256": "1d9a195e80dcb30aa23e7a742e20c4f3c8f21cdb1adf11363a9ba96781d7b461", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "sentiment_engine.py", + "target": "app/sentiment_engine.py", + "bytes": 21197, + "sha256": "5e105cd1cd2f4d61acf15214ebbfb3fd1801a6e2a9469b25d24bcf26e96f83c7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "server.py", + "target": "app/server.py", + "bytes": 263768, + "sha256": "2fb23eb826db12bd5527b07a492dca43e50f1bfcaac34d433313d69f225ff1f5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/app.js", + "target": "app/static/app.js", + "bytes": 441313, + "sha256": "c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/design-system.css", + "target": "app/static/design-system.css", + "bytes": 53995, + "sha256": "52e8b20a2d41b66187146325d866af917e7906056dbb868faf0ce86fac9e1d1b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/heaven-loading-v2.js", + "target": "app/static/heaven-loading-v2.js", + "bytes": 32088, + "sha256": "0ee0f78232b01cd00820e1de7ec004689624884d1bf19262b0a593c504f0c73e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/heaven-loading.js", + "target": "app/static/heaven-loading.js", + "bytes": 30563, + "sha256": "ee914762b893a89f745e9e705cac6840c1dbd6c5b68dc7a47620b8c4db3615c7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/index.html", + "target": "app/static/index.html", + "bytes": 134831, + "sha256": "e3dd495c1f5ba4fd3d4d1d2468f4ac7c525fbd316ec68a52ccf50e3e8b367e3f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages.config.js", + "target": "app/static/pages.config.js", + "bytes": 2581, + "sha256": "ad383f066d3bb90bca871a49362ba2a4823f09609ba4e65df99595b72ecb4e7c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/auction/page.js", + "target": "app/static/pages/auction/page.js", + "bytes": 122, + "sha256": "9b15f32b15d51c0f6463c4f7a30e27ebbee05eb47c0edab72fe4046aee961fa5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/dragon-tiger/page.js", + "target": "app/static/pages/dragon-tiger/page.js", + "bytes": 103, + "sha256": "c3f63538eec7eab0a19f3945c0bb68af31b9e709054f0ff6c6aa95994a362595", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/heaven/page.js", + "target": "app/static/pages/heaven/page.js", + "bytes": 117, + "sha256": "498f9801231c4a3f48025153e9211bf830848f2ffbbafdf150a1764dde8c391a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/ladder/page.js", + "target": "app/static/pages/ladder/page.js", + "bytes": 62, + "sha256": "bb70bf421c7af5fdb22905e3cdbdd24644291e353b7660a3b04884667c1c8b36", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/mentor/page.js", + "target": "app/static/pages/mentor/page.js", + "bytes": 92, + "sha256": "62f205db8c6bdf696d243818ad93e51f7b16bba53cc27a7e406266cef281eaef", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/pools/page.js", + "target": "app/static/pages/pools/page.js", + "bytes": 135, + "sha256": "186523861e11b775ad704d0a6c5fa8d7bd3cf3fa00db154ec8508ab69be497be", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/popularity/page.js", + "target": "app/static/pages/popularity/page.js", + "bytes": 104, + "sha256": "87c31aaf6c69cce7bb8bd1cc4e1aab8a2ef5e9bb084ad251b0741fa453bc8133", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/review/page.js", + "target": "app/static/pages/review/page.js", + "bytes": 101, + "sha256": "7b341760a193194ac65ed01d5271e8649d8ffec32e0ed8787f0da02c3f514944", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/rotation/page.js", + "target": "app/static/pages/rotation/page.js", + "bytes": 98, + "sha256": "e762d4208c61018996a796b06b7b827fc91cb7ff444bda5b1d62732568f57c52", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/runtime.js", + "target": "app/static/pages/runtime.js", + "bytes": 2069, + "sha256": "48f967396bdc4af1a4953828a46c2520bea17dbaa1996ff7a570c47620285c23", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/screener/page.js", + "target": "app/static/pages/screener/page.js", + "bytes": 173, + "sha256": "94e8a7fc23b6d42a590c46fadc03da5e909bc3feee935c3358ec1d20897f736c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/sentiment/page.js", + "target": "app/static/pages/sentiment/page.js", + "bytes": 106, + "sha256": "b3aaa1edc1a9a98a10a87f050bef54674a942cd1c85786daff386ef85a61de7a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/pages/themes/page.js", + "target": "app/static/pages/themes/page.js", + "bytes": 98, + "sha256": "04fab6f00b1230bbc340f05525736fb6e695ec5f7d228a7cba2b273692149efb", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/redesign-v2.css", + "target": "app/static/redesign-v2.css", + "bytes": 263539, + "sha256": "74d5a0356fb3d4b8e5c5b8b23eb91e5a2ef95678dcf8a6c6bd062a4ca12b6b44", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/renovation.css", + "target": "app/static/renovation.css", + "bytes": 83949, + "sha256": "8a12c5f8dd016e1940477f85a7b311e28598c88a83fcc326197698742d42032e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/shared/api.js", + "target": "app/static/shared/api.js", + "bytes": 3349, + "sha256": "aee776d9b75c5a83e92c1601bdf3691ca3be1f73c8e9e0cf474f8084acb5e355", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/shared/components.js", + "target": "app/static/shared/components.js", + "bytes": 1902, + "sha256": "97b83973c160045cf5e0881ddc2699a567ed47385d6bbfcec90ab29ed0c31c65", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/shared/shell.js", + "target": "app/static/shared/shell.js", + "bytes": 7909, + "sha256": "37e1ad3ae6243f6478b75ea85d0ac5a101b5684d8b051a4a78bdf1387f950933", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/shared/state.js", + "target": "app/static/shared/state.js", + "bytes": 1414, + "sha256": "2ddec021bc52cae1c20e04458ae594f4ca9d5c2c2baacedae32db75d583146a2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/shared/tokens.css", + "target": "app/static/shared/tokens.css", + "bytes": 13250, + "sha256": "564910e5a8110fa9c7baa4c6d91f9fedb99b659ba25f412cf10b171527c120be", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/styles.css", + "target": "app/static/styles.css", + "bytes": 361780, + "sha256": "d84aebcaad44fbf8c9a8a97995477664bd33b0d5034df1dbaf82c71d6203efb1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/theme.css", + "target": "app/static/theme.css", + "bytes": 36427, + "sha256": "86bd8b62ff3b1feadfd6ded506d175fb91cb0d62a18bf68ed15b18f569498501", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/ui-core.js", + "target": "app/static/ui-core.js", + "bytes": 1832, + "sha256": "ddcbfbf7622c1aa8b59cef62bcb36b2158ff15714732096a809b26205a8b177a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/vendor/lucide.min.js", + "target": "app/static/vendor/lucide.min.js", + "bytes": 357796, + "sha256": "3411692820cb8d47543f69496aa25fd603a358f4498046f41c508a5a3342210e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "static/wentian-v2.css", + "target": "app/static/wentian-v2.css", + "bytes": 73222, + "sha256": "5c5c6d09a8b4587b2a9b9580bafd0e73687323f2a13546089b386c1cffcec618", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "strategy_tracking.py", + "target": "app/strategy_tracking.py", + "bytes": 110, + "sha256": "97107279d65f8e459ea9e74d343d4488d0de732989d1209441efed5ddd1e6b5d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "sync_data.py", + "target": "app/sync_data.py", + "bytes": 1052, + "sha256": "fcd7cf110c2a2c4e4eb1871a7287c02cfc1eecc61dfa36a3c16e1b180aa1d392", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/e2e/app-shell.spec.js", + "target": "app/tests/e2e/app-shell.spec.js", + "bytes": 150708, + "sha256": "177cadf9230ac8690ceb9465f7fc56d0b4fb809a22880b1eaa5bceedc3e767fd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_account_access.py", + "target": "app/tests/test_account_access.py", + "bytes": 9315, + "sha256": "76a7c85725a712c7420dada09fdfc2109ca7d94f85b25f60cd6a997eb3eeea64", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_account_data_boundaries.py", + "target": "app/tests/test_account_data_boundaries.py", + "bytes": 13169, + "sha256": "c164630f70cba5817f19476e052c4207f62ced8ef8e4cc198d20d29b6b2f369b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_alerts.py", + "target": "app/tests/test_alerts.py", + "bytes": 3793, + "sha256": "9447345a9c315f9ed3f87dffa4e98f44bc1c9d6902831c37f5a6822817aeb32b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_api_access.py", + "target": "app/tests/test_api_access.py", + "bytes": 2452, + "sha256": "5f8d05519abadf65cf0c2bd373b398753fad32096bfe9aa730894dedafbb51a5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_bootstrap_container.py", + "target": "app/tests/test_bootstrap_container.py", + "bytes": 2282, + "sha256": "65025b49dd8fb48ca8cf822814f195fe53f2825ca53d9e0eda986a37e4061bfb", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_chart_data_provider.py", + "target": "app/tests/test_chart_data_provider.py", + "bytes": 4738, + "sha256": "6dcb83012ccc2151ca6dbe2b0a38b8948411c0d8740a0b5b1e8729c91fd1d852", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_css_governance.py", + "target": "app/tests/test_css_governance.py", + "bytes": 2628, + "sha256": "7e0df2d4fd817c934338e70cc7ec319b381ffa4e382d98906291b5b0a474c723", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_curated_screener.py", + "target": "app/tests/test_curated_screener.py", + "bytes": 23775, + "sha256": "e30555f618a7d189f0f6a465d97bd94fd3baeec8469c7ac35b891e99da3137a8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_dashboard_cache.py", + "target": "app/tests/test_dashboard_cache.py", + "bytes": 3998, + "sha256": "f8bbd089fc5b06dd41ad2011297f3890378130f07493765d2e3a6ac3e8823da9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_data_gateway.py", + "target": "app/tests/test_data_gateway.py", + "bytes": 5840, + "sha256": "26fe24e5125af24f6fb4270aade75bdde95e05854398de8f0a204b60a5df45d3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_database_migrations.py", + "target": "app/tests/test_database_migrations.py", + "bytes": 3285, + "sha256": "610a1580225a5ebe2e7eb4572bc9dc437fe95354537d24daf8bbc25a17eb905a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_deployment_contract.py", + "target": "app/tests/test_deployment_contract.py", + "bytes": 1430, + "sha256": "a3ac62b9a21e584a1a5b3222c6823a86782392eb4eee36512989d1c78d347a24", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_feature_boundaries.py", + "target": "app/tests/test_feature_boundaries.py", + "bytes": 2204, + "sha256": "447f2ed2586498acdd8ea3e48017440cb2c7df35fca6d35b008440f0fd1e1158", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_five_phase_weights.py", + "target": "app/tests/test_five_phase_weights.py", + "bytes": 3671, + "sha256": "53590ff4c8a8a7a6383b958a45ba3714f3eb59b80bdb8b4c86f56d8c72cccd02", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_frontend_boundaries.py", + "target": "app/tests/test_frontend_boundaries.py", + "bytes": 6152, + "sha256": "2910dfac2557326a5430776641f21791b3a42390c473c80520d1ae24a23487a8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_frontend_contract.py", + "target": "app/tests/test_frontend_contract.py", + "bytes": 18737, + "sha256": "1e9bdd4a33ff538472d4e811069969cc4c887bbddf238bfde33566005253d11d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_global_search.py", + "target": "app/tests/test_global_search.py", + "bytes": 3785, + "sha256": "425708b2924c49267e4fdd66c3305d43f347ca9a0a617bb105287ab2e437abbd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_governance_registries.py", + "target": "app/tests/test_governance_registries.py", + "bytes": 4488, + "sha256": "6a2d3933f03657d0a7315f405a8b9c5651a2b5a76932c354dcb8a707b0856019", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_heaven_readings.py", + "target": "app/tests/test_heaven_readings.py", + "bytes": 4681, + "sha256": "ff26a05e7dd283fc934ae2b9252b79ca9a64dc8f3c4f773629e4d9463456e63c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_heaven_realtime.py", + "target": "app/tests/test_heaven_realtime.py", + "bytes": 15458, + "sha256": "f3bda7f81e2e7395709933872fc9f8add5385a750f2d2e404caccd8105b13191", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_hot_money_profiles.py", + "target": "app/tests/test_hot_money_profiles.py", + "bytes": 2519, + "sha256": "db9317910f6442d0814c47e4594f0fdbffe6e061f7e3b2faecba85d40259373e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_http_governance.py", + "target": "app/tests/test_http_governance.py", + "bytes": 2067, + "sha256": "9bf16d2ccbb6b4e5740fc59abe5eedf8740bd547bc81f7786de8af064f27c5a9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_ifind_client.py", + "target": "app/tests/test_ifind_client.py", + "bytes": 1808, + "sha256": "0229b9bfd323f5d3abeb62b8891602646457d4a0fa63d558e219da8518607e72", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_ifind_features.py", + "target": "app/tests/test_ifind_features.py", + "bytes": 6736, + "sha256": "c2cccf4a1c2859589c1205cbc699596cca8a244da50797830b8fe47e5bc6c7fe", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_job_runner.py", + "target": "app/tests/test_job_runner.py", + "bytes": 2672, + "sha256": "4a8c8adef5c82509080973308c704d1fc22024beb8aea195a9efb9694f89ac3f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_llm_gateway.py", + "target": "app/tests/test_llm_gateway.py", + "bytes": 3957, + "sha256": "a45e2c3ccfd226d7119bc2c9bd1661a00a07da7a9a5700462c48897237f157d5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_llm_stream.py", + "target": "app/tests/test_llm_stream.py", + "bytes": 1332, + "sha256": "dddc286e8bc8314271e7392709557f252b4b73588512af001c0c636c0d798791", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_market_insights.py", + "target": "app/tests/test_market_insights.py", + "bytes": 15299, + "sha256": "a6eb57ad2c46f6c2aaa6249dd667123fa5704529768851302242fa31b37964f4", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_market_mode.py", + "target": "app/tests/test_market_mode.py", + "bytes": 8424, + "sha256": "32df6d91dc33fb918ea705cb5a10f7d97583f153ef3b5bdd6473093c44752dd0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_mentor_registry.py", + "target": "app/tests/test_mentor_registry.py", + "bytes": 3715, + "sha256": "d63b48ed654ff8f32cfaf2002a31ecdad90fe3648c037a4c00c2d6765b09deb4", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_mentor_stream.py", + "target": "app/tests/test_mentor_stream.py", + "bytes": 3733, + "sha256": "d1b55a7d5a4821064f507b6abf72216762ed5d34dfe80c83855bd11d7db5cae8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_realtime_dashboard.py", + "target": "app/tests/test_realtime_dashboard.py", + "bytes": 5191, + "sha256": "22eb373954f6aaf1b7507493a7a678a2471efd3f0cfbef1e69a5bba2bf7e30e2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_repository_boundaries.py", + "target": "app/tests/test_repository_boundaries.py", + "bytes": 2202, + "sha256": "d24dca7d4b92804d26ad0048318a1e65224a3ce8560d6e0f36399fc8e267f492", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_review_assistant.py", + "target": "app/tests/test_review_assistant.py", + "bytes": 3805, + "sha256": "83e2c091aace162cfb4e7144a310c54d7c0c3cfe5bea592ffb024e7f7787a04c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_sentiment_engine.py", + "target": "app/tests/test_sentiment_engine.py", + "bytes": 1308, + "sha256": "323922a011df5cc77bef60f81defb1a38debb879ed5559e90b01d20e56c4cb72", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_stock_detail_realtime.py", + "target": "app/tests/test_stock_detail_realtime.py", + "bytes": 6008, + "sha256": "3fd337c5cd45072f091b5f7cb7b096736931d6b6a3a81e9c388e3075f0e48852", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_strategy_tracking.py", + "target": "app/tests/test_strategy_tracking.py", + "bytes": 5965, + "sha256": "c0762fa26d4b842f04328b767a80faa649dfcc4e7083c4a813644c437373dea9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tests/test_trade_journal.py", + "target": "app/tests/test_trade_journal.py", + "bytes": 3417, + "sha256": "1da802488dcea0f6e8912b5bf352a784f394dd603e7af1bf1e4998a78b9e824c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tools/build_api_registry.py", + "target": "app/tools/build_api_registry.py", + "bytes": 3940, + "sha256": "5b44d5681ed5e788ea9e93bfcbe5feb501729956af4121d6776fbe03fa07f0ea", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tools/build_architecture_inventory.py", + "target": "app/tools/build_architecture_inventory.py", + "bytes": 5879, + "sha256": "2f0dd25cd841029662e2faca6f0e95fae0d07c2e50945b3310d1f30e9847e8da", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tools/build_preservation_manifest.py", + "target": "app/tools/build_preservation_manifest.py", + "bytes": 3707, + "sha256": "497aec086254a14129616a942cf0726a2d373eed7766000ae1fb226054df0d7a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tools/verify_baseline.py", + "target": "app/tools/verify_baseline.py", + "bytes": 1908, + "sha256": "89a4b17efb34acda0f9d8d6e1f2efc4b5950f16ab1be853f7ee2e5f3c7c19b38", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "trade_journal.py", + "target": "app/trade_journal.py", + "bytes": 159, + "sha256": "880810f655c274a9679fca8f7e8029157a93a748cb23fd520a1c4160ba815446", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "tushare_client.py", + "target": "app/tushare_client.py", + "bytes": 94312, + "sha256": "2715ea6e6d821daa4a07f81b5d9ad40c0eb00e2f4d0d10f8e3588c5363dae204", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/INSTALLER", + "target": "app/vendor/lunar_python-1.4.8.dist-info/INSTALLER", + "bytes": 4, + "sha256": "ceebae7b8927a3227e5303cf5e0f1f7b34bb542ad7250ac03fbcde36ec2f1508", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/METADATA", + "target": "app/vendor/lunar_python-1.4.8.dist-info/METADATA", + "bytes": 501, + "sha256": "ffa362fe5922f833bca013f34bf58f4b77430be92e5a43a49fb3726d78466386", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/RECORD", + "target": "app/vendor/lunar_python-1.4.8.dist-info/RECORD", + "bytes": 5379, + "sha256": "10add0b9df7496da8797309482702687a6841828d0d46ce2a5e5081f4ffe334e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/REQUESTED", + "target": "app/vendor/lunar_python-1.4.8.dist-info/REQUESTED", + "bytes": 0, + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/WHEEL", + "target": "app/vendor/lunar_python-1.4.8.dist-info/WHEEL", + "bytes": 91, + "sha256": "2b6eb4118ce7cd7b09601406aa623c553c4476265836f0d9c16f5c061f7efcc0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/licenses/LICENSE", + "target": "app/vendor/lunar_python-1.4.8.dist-info/licenses/LICENSE", + "bytes": 1061, + "sha256": "a9d04f47f0615c0ce48bdbe2ff58d5c174279d9f20f044ef29249632302a4ab3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python-1.4.8.dist-info/top_level.txt", + "target": "app/vendor/lunar_python-1.4.8.dist-info/top_level.txt", + "bytes": 13, + "sha256": "0696650a295408c6e6f9c12dd5b475ba3cccb96b419670aa66770f809656a9e8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/EightChar.py", + "target": "app/vendor/lunar_python/EightChar.py", + "bytes": 13761, + "sha256": "d38241e75b693f25fc8c2a3e1587fd028a0a52cc504f9d5c7b47326eef051c0c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/Foto.py", + "target": "app/vendor/lunar_python/Foto.py", + "bytes": 3848, + "sha256": "94e3e72fb625f0e60a474d420f7ceb24bca8ee647243d7f1b20140b9238b2cf8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/FotoFestival.py", + "target": "app/vendor/lunar_python/FotoFestival.py", + "bytes": 946, + "sha256": "44d2d1853e47b5155b1090b832ecb60a446f64e4654b419f46f2be908ef03798", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/Fu.py", + "target": "app/vendor/lunar_python/Fu.py", + "bytes": 768, + "sha256": "ef61ccbfa86e7d2481dda0e0e3d413dc3ede1d3045518a45b71a00c4de518a54", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/Holiday.py", + "target": "app/vendor/lunar_python/Holiday.py", + "bytes": 1263, + "sha256": "109a40074b0dd53d50353157fb808e30565f9b8fde198eb79153e2110105a3f2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/JieQi.py", + "target": "app/vendor/lunar_python/JieQi.py", + "bytes": 1383, + "sha256": "c4d760d317d09053b228dd851616ba68a5455482f206e08ac750ca6148daf459", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/Lunar.py", + "target": "app/vendor/lunar_python/Lunar.py", + "bytes": 48684, + "sha256": "489a1725a2ba443f9e8acf0534f05a0ee28c24f8904adb129c8a30daa3ed7079", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/LunarMonth.py", + "target": "app/vendor/lunar_python/LunarMonth.py", + "bytes": 5419, + "sha256": "4559d617666bb00ad8db1633bd59332242795b81bd049643a64cfe6aff47ab28", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/LunarTime.py", + "target": "app/vendor/lunar_python/LunarTime.py", + "bytes": 5108, + "sha256": "63f073d30c524cc25abf8c58adcc02d6fe836eba1f450254c7f231fd8103f91a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/LunarYear.py", + "target": "app/vendor/lunar_python/LunarYear.py", + "bytes": 12228, + "sha256": "84308cf06c2e7666401676b58fdbc1a9a81491584b710cd9927fd5d2d579bbb5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/NineStar.py", + "target": "app/vendor/lunar_python/NineStar.py", + "bytes": 5148, + "sha256": "b52c00d12d5c8080a27d9f34afba3a8e4e3c6e7941033fb55fb5a507ab5cd1ec", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/ShuJiu.py", + "target": "app/vendor/lunar_python/ShuJiu.py", + "bytes": 577, + "sha256": "af852d2db583d0b08757ebdf39d1064a0e6101506e976f6d02ba32e4bdb5952a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/Solar.py", + "target": "app/vendor/lunar_python/Solar.py", + "bytes": 14919, + "sha256": "8fa3df760f59ea937dae7125d49406985df90d92178a0741d6d4c2ff85b26d5e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/SolarHalfYear.py", + "target": "app/vendor/lunar_python/SolarHalfYear.py", + "bytes": 1690, + "sha256": "569c98ab78e137aebf431ca85512a2e2610c637d2d747ed9ffde707aeebfd3c3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/SolarMonth.py", + "target": "app/vendor/lunar_python/SolarMonth.py", + "bytes": 2196, + "sha256": "f3957598018c35114099cd48030fa287c1767f69b63dd84c51dd999c5997827b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/SolarSeason.py", + "target": "app/vendor/lunar_python/SolarSeason.py", + "bytes": 1638, + "sha256": "4fdaca631c3f28112e4d557f8ce88037b31c85fd257db5872f10aa5a68e38192", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/SolarWeek.py", + "target": "app/vendor/lunar_python/SolarWeek.py", + "bytes": 5707, + "sha256": "f90bc349f31d52bc25646957b443b8c9e41d68874b714d947915d1535588291b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/SolarYear.py", + "target": "app/vendor/lunar_python/SolarYear.py", + "bytes": 1130, + "sha256": "66e87edb42688fc805bcfe39bce4958fe810a76fed294aaa514402d6f6304a10", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/Tao.py", + "target": "app/vendor/lunar_python/Tao.py", + "bytes": 3803, + "sha256": "bed11b1de9d83a4381029d3c7b57325eff7943a74fe52abf69255ba351044f37", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/TaoFestival.py", + "target": "app/vendor/lunar_python/TaoFestival.py", + "bytes": 597, + "sha256": "d3fc8f576c74dc5e83b7233d20873f094b23e0f3e2a0680b54d4d54450e0f9ea", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/__init__.py", + "target": "app/vendor/lunar_python/__init__.py", + "bytes": 638, + "sha256": "fddc55f6b0bd5cc424f4d861d910fa938f94bd5c5761517672a279f32854f5c7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/eightchar/DaYun.py", + "target": "app/vendor/lunar_python/eightchar/DaYun.py", + "bytes": 2611, + "sha256": "039749b92900097bcfa40e8b67b44eca7b7b48ecb3af0ce1b8c554a762c82ce7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/eightchar/LiuNian.py", + "target": "app/vendor/lunar_python/eightchar/LiuNian.py", + "bytes": 1447, + "sha256": "a069ceca115f0ddeba0b720bf3edf20c882aec88c25140478d4742218b26678b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/eightchar/LiuYue.py", + "target": "app/vendor/lunar_python/eightchar/LiuYue.py", + "bytes": 1642, + "sha256": "4aa59e23263a1b3ac6979ff57a0abf4f15f3cb10976e6e1305308d0d3f8f0a46", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/eightchar/XiaoYun.py", + "target": "app/vendor/lunar_python/eightchar/XiaoYun.py", + "bytes": 1334, + "sha256": "a1ea1352db91f967ca6b77ebf2827f789aeeb715cfdbe4664dfc8a1ee5009ffd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/eightchar/Yun.py", + "target": "app/vendor/lunar_python/eightchar/Yun.py", + "bytes": 3423, + "sha256": "b532004acb38a3caa7f399e3a3d5269c586538f9acf95e526be8bbd2d31bf696", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/eightchar/__init__.py", + "target": "app/vendor/lunar_python/eightchar/__init__.py", + "bytes": 155, + "sha256": "b2ea776642cb827d79ec1110cdfdcf8ad98eec63bc8f90a83ece496bb378cfbb", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/FotoUtil.py", + "target": "app/vendor/lunar_python/util/FotoUtil.py", + "bytes": 14678, + "sha256": "e07a7f395082e46c691bf6579a096b9b71755aee7152d98b3a89b7ca74323e74", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/HolidayUtil.py", + "target": "app/vendor/lunar_python/util/HolidayUtil.py", + "bytes": 21983, + "sha256": "e62b6e8d796ac8df6a058788133f336f47cf320196f45ed03cc7e99ef86b6ae6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/LunarUtil.py", + "target": "app/vendor/lunar_python/util/LunarUtil.py", + "bytes": 109420, + "sha256": "87a84818a3ddd10925cbb28ec04a048b27e1ac46f291ff4d9a861f15fb59aa00", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/ShouXingUtil.py", + "target": "app/vendor/lunar_python/util/ShouXingUtil.py", + "bytes": 67277, + "sha256": "5247110bf663bce23e9185cc9d4022950a9f7be5664a619286c1b657476ad9d6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/SolarUtil.py", + "target": "app/vendor/lunar_python/util/SolarUtil.py", + "bytes": 10017, + "sha256": "bba034d893ef74e4f219452ed143302082532990b2aafc852f74c90bfb25a7a3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/TaoUtil.py", + "target": "app/vendor/lunar_python/util/TaoUtil.py", + "bytes": 8061, + "sha256": "20ea01c41caa09affbaac0da793b88efb7e1cc4bb363aeb6d1edef2114493dee", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "vendor/lunar_python/util/__init__.py", + "target": "app/vendor/lunar_python/util/__init__.py", + "bytes": 226, + "sha256": "8beb7a058bcf5862b53441beb41855140e8ef4c914f59eef22cfb81f1f4ad8f2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/SKILL.md", + "target": "app/游资skills/asking-perspective/SKILL.md", + "bytes": 5884, + "sha256": "9b0769b3eae7b14a4bc5e3c7a07fde9fc63be1bff420e2601c99270705d867f5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/references/research/01-writings.md", + "target": "app/游资skills/asking-perspective/references/research/01-writings.md", + "bytes": 580, + "sha256": "1a3b2d9c06a6475e8bd98e881821c8b442d732aecf6d94a880ddf4b5755a077f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/references/research/02-conversations.md", + "target": "app/游资skills/asking-perspective/references/research/02-conversations.md", + "bytes": 318, + "sha256": "4cc528c0155a0169ab2c56596132d6d7a0b69b2589cfb4493fe6d7669705b592", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/asking-perspective/references/research/03-expression-dna.md", + "bytes": 299, + "sha256": "9cb50c8b88bc4f7762396981d55a60108ed7f185fced45de0e09c366df035c3e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/references/research/04-external-views.md", + "target": "app/游资skills/asking-perspective/references/research/04-external-views.md", + "bytes": 425, + "sha256": "e7ab1d2957e2184d009f50c433e54fc9b041e8f059a7d04d727b4ac78215d8b6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/references/research/05-decisions.md", + "target": "app/游资skills/asking-perspective/references/research/05-decisions.md", + "bytes": 251, + "sha256": "0cb6624e1e831084d39b86fc598bac1628bc8cff3eba9c7d543678ab56f8c989", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/asking-perspective/references/research/06-timeline.md", + "target": "app/游资skills/asking-perspective/references/research/06-timeline.md", + "bytes": 347, + "sha256": "ec41a6f746f61036c455f0011e57c191ad8101e3fda84972e1d03b4f93da2a6a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/SKILL.md", + "target": "app/游资skills/beijingchaojia-perspective/SKILL.md", + "bytes": 6402, + "sha256": "96c8a8a190f4ab9664ba8eb5dc0cd31cd04050648a50baab74ea1e4f53b8e36a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/references/research/01-writings.md", + "target": "app/游资skills/beijingchaojia-perspective/references/research/01-writings.md", + "bytes": 596, + "sha256": "ebc22af57a65c9ec99359d2f6c9fbc49e18a72104ca65ccf2c0b8a00a3ac725b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/references/research/02-conversations.md", + "target": "app/游资skills/beijingchaojia-perspective/references/research/02-conversations.md", + "bytes": 349, + "sha256": "ea1f331a52859f573c820e47094570583f867c607b98a82ec44ab798acfd4a9b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/beijingchaojia-perspective/references/research/03-expression-dna.md", + "bytes": 258, + "sha256": "944741a48ee08772a174f7035977039b4397f398d67f783b55390ea2258455d5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/references/research/04-external-views.md", + "target": "app/游资skills/beijingchaojia-perspective/references/research/04-external-views.md", + "bytes": 389, + "sha256": "92856851c57aca51583f8ebfcacb84a668ffa75212a1e0328ae2f3a48771518d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/references/research/05-decisions.md", + "target": "app/游资skills/beijingchaojia-perspective/references/research/05-decisions.md", + "bytes": 314, + "sha256": "1eed09c2b3485496b825d3a8750bf92944e46e2d72c962c585f7cff37c73794d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/beijingchaojia-perspective/references/research/06-timeline.md", + "target": "app/游资skills/beijingchaojia-perspective/references/research/06-timeline.md", + "bytes": 294, + "sha256": "fc8064596034837cfbabf175d434e1c7391c16a9f1fdc43946433cb01a027294", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/SKILL.md", + "target": "app/游资skills/chuangshiji-perspective/SKILL.md", + "bytes": 5620, + "sha256": "c3c859b14a8efb69b45e377467c3478a3a2b03a902b1e979fbf83cc7d6f5593f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/references/research/01-writings.md", + "target": "app/游资skills/chuangshiji-perspective/references/research/01-writings.md", + "bytes": 604, + "sha256": "4f090872df953dce61c2486232633bb808fbcf07ff9c549e096a193da4e202d9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/references/research/02-conversations.md", + "target": "app/游资skills/chuangshiji-perspective/references/research/02-conversations.md", + "bytes": 313, + "sha256": "6d9de4ffd9c802377a94f9c4fd802504a237aae55e9af2917d599e7773ff32c9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/chuangshiji-perspective/references/research/03-expression-dna.md", + "bytes": 219, + "sha256": "9a0453edfced6046d3ac8489e4f00534a796f99208faefda92d02d10af85c0be", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/references/research/04-external-views.md", + "target": "app/游资skills/chuangshiji-perspective/references/research/04-external-views.md", + "bytes": 294, + "sha256": "e1d8db2648d25ededf80c7c83fb5f997f9179abea677ef71718c1536caec7b59", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/references/research/05-decisions.md", + "target": "app/游资skills/chuangshiji-perspective/references/research/05-decisions.md", + "bytes": 264, + "sha256": "dc37d0618ccff499426e744db69a6c156f6235ebcb8ae833920e67526ea87081", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/chuangshiji-perspective/references/research/06-timeline.md", + "target": "app/游资skills/chuangshiji-perspective/references/research/06-timeline.md", + "bytes": 312, + "sha256": "6fc099bf2b45bdda27446b9dccb8c84647ddd7115ca925568bbbc64c480cd806", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/SKILL.md", + "target": "app/游资skills/fangxinxia-perspective/SKILL.md", + "bytes": 5872, + "sha256": "681e6e85e5275125f35ba292609b870c4d6de17a5f4c78e410a90059e705a132", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/references/research/01-writings.md", + "target": "app/游资skills/fangxinxia-perspective/references/research/01-writings.md", + "bytes": 481, + "sha256": "1240440ad2821a8644f9535d60ab18ce8037349fd8d59f3b1d813440e1250bd7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/references/research/02-conversations.md", + "target": "app/游资skills/fangxinxia-perspective/references/research/02-conversations.md", + "bytes": 275, + "sha256": "75851cb3f0651fd05f32a53772d24d7441dd3c29012d834e54970a3121747194", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/fangxinxia-perspective/references/research/03-expression-dna.md", + "bytes": 230, + "sha256": "62ba52fd1ac0b8744fa4c32fd6d2b4f079a1c26cdff07e2333c737a8325801d5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/references/research/04-external-views.md", + "target": "app/游资skills/fangxinxia-perspective/references/research/04-external-views.md", + "bytes": 354, + "sha256": "76207223af30123c4f0dfaaf0110b73f5a978b37ffc8512913a1918b9fd23c1b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/references/research/05-decisions.md", + "target": "app/游资skills/fangxinxia-perspective/references/research/05-decisions.md", + "bytes": 284, + "sha256": "ed53e477e1fa4e207bbf4c3cb296c8eb798162760d0a0d1de8723cc43e881071", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/fangxinxia-perspective/references/research/06-timeline.md", + "target": "app/游资skills/fangxinxia-perspective/references/research/06-timeline.md", + "bytes": 328, + "sha256": "37676d025478be36f96a06c7ea44e0f064877881cc490d5c9d7611914cff36b9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/SKILL.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/SKILL.md", + "bytes": 5237, + "sha256": "e5fed1282bdce0ca670afae01b0d5c30c1710bd775a2d99a15530464afb15e60", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/references/research/01-writings.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/references/research/01-writings.md", + "bytes": 457, + "sha256": "b8931d32779d90e58251ca2914d4bcb6843639e8afec6e435e8eadfcae760d68", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/references/research/02-conversations.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/references/research/02-conversations.md", + "bytes": 242, + "sha256": "081cab05ca41e1c28d7359a66ed03e5ca9c21370e7124057276b7cb6bc0c297b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/references/research/03-expression-dna.md", + "bytes": 245, + "sha256": "1748a3b388e629e22a6493caaa76537acfc4051eb187191ab79e39a7e7021b10", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/references/research/04-external-views.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/references/research/04-external-views.md", + "bytes": 489, + "sha256": "73d69c85014eed320465c8f7afefca60585b19b94ec9fd7ced09b4d9b531aefc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/references/research/05-decisions.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/references/research/05-decisions.md", + "bytes": 383, + "sha256": "4c72ed226eb493fa6a06d8299e6d1a474b59ef43f7c6558575e220c4209d50f6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/foshanwuyingjiao-perspective/references/research/06-timeline.md", + "target": "app/游资skills/foshanwuyingjiao-perspective/references/research/06-timeline.md", + "bytes": 326, + "sha256": "95bc2386e7dac54694aa5363f24dc09925d06148c3b1a8c24f9fc22bc42e1442", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/SKILL.md", + "target": "app/游资skills/kobe92-perspective/SKILL.md", + "bytes": 6190, + "sha256": "66885b0e1081d49c48204e099b1df6d39c73aa83263cb20110cc884bb07dcd59", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/references/research/01-writings.md", + "target": "app/游资skills/kobe92-perspective/references/research/01-writings.md", + "bytes": 645, + "sha256": "45f8d800dd8bf2913f1cff85233c5e68513b6255a113e3570bb40b1a9b0d9f0d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/references/research/02-conversations.md", + "target": "app/游资skills/kobe92-perspective/references/research/02-conversations.md", + "bytes": 339, + "sha256": "51073d902ca69e5e7dc599bf70facc0506566c03390e7722760e46df98490951", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/kobe92-perspective/references/research/03-expression-dna.md", + "bytes": 253, + "sha256": "5968ead3a3170279cba6df2c0af36611b05625fd7014b95bcdfebfa12515343a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/references/research/04-external-views.md", + "target": "app/游资skills/kobe92-perspective/references/research/04-external-views.md", + "bytes": 420, + "sha256": "c06f1ac90ae600f14a16eb98fcebd8415049bea84ddbff0e4d1c2eca7f363643", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/references/research/05-decisions.md", + "target": "app/游资skills/kobe92-perspective/references/research/05-decisions.md", + "bytes": 326, + "sha256": "a6500e97c9f837c72057a7e9e36a08156e8d03e0687d623148cf5d8b68077741", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/kobe92-perspective/references/research/06-timeline.md", + "target": "app/游资skills/kobe92-perspective/references/research/06-timeline.md", + "bytes": 362, + "sha256": "5db2b257c855ee7a3b74c0f788c151abb4d50da26c6ff798b396b6d6a31576a1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/SKILL.md", + "target": "app/游资skills/longfeihu-perspective/SKILL.md", + "bytes": 6083, + "sha256": "8cabd76e9fc80e29c296f4c9ffb9bc30db3e545b8b5d5d0eacbec0ef2a9bc2d6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/references/research/01-writings.md", + "target": "app/游资skills/longfeihu-perspective/references/research/01-writings.md", + "bytes": 548, + "sha256": "9a35de2785d7fcb3b0b2d8825a0e3d797df21a1dfd7ca4d72e885626edd3b53f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/references/research/02-conversations.md", + "target": "app/游资skills/longfeihu-perspective/references/research/02-conversations.md", + "bytes": 392, + "sha256": "e939e231e85e94336aa04d8038bad634fbbc6608746cf2bf05f39541dc2b3cbc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/longfeihu-perspective/references/research/03-expression-dna.md", + "bytes": 298, + "sha256": "f5d2071326c1cebb284a9812718e9ef6736c7772af59d15f40cefd621a02130b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/references/research/04-external-views.md", + "target": "app/游资skills/longfeihu-perspective/references/research/04-external-views.md", + "bytes": 321, + "sha256": "83b3df46b34bb2a519edb81def1d814474ca367de9cd33cd9dd8fc37e556c46d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/references/research/05-decisions.md", + "target": "app/游资skills/longfeihu-perspective/references/research/05-decisions.md", + "bytes": 342, + "sha256": "1052fd2e18069926fc015aedbd2768c7a46eaa39fb511ce70bcd1e45e99a1eb2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/longfeihu-perspective/references/research/06-timeline.md", + "target": "app/游资skills/longfeihu-perspective/references/research/06-timeline.md", + "bytes": 398, + "sha256": "5a96420d63144d25399aed24bc348d68fe4ed652f1b0d64e39a33a73cf53c7f2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/mentor_catalog.json", + "target": "app/游资skills/mentor_catalog.json", + "bytes": 4518, + "sha256": "7e192e37d460a109f9c97e666ebe39ac1bcf1555a006a965d171350e62cb3d9b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/SKILL.md", + "target": "app/游资skills/niepanchongsheng-perspective/SKILL.md", + "bytes": 7130, + "sha256": "cd7b7e47e70101ea7ffc38d90277efb8d66fb55a9a8b17709d1b7cee5cc57991", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/references/research/01-writings.md", + "target": "app/游资skills/niepanchongsheng-perspective/references/research/01-writings.md", + "bytes": 786, + "sha256": "e5d47a201a18f6967592f674016a83bb23d86976886a0209d401aab496f39411", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/references/research/02-conversations.md", + "target": "app/游资skills/niepanchongsheng-perspective/references/research/02-conversations.md", + "bytes": 348, + "sha256": "7d4e52787afdc55622e379bf6cb6da93ddb6be6a68124077b896900b4a830918", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/niepanchongsheng-perspective/references/research/03-expression-dna.md", + "bytes": 362, + "sha256": "ad5eb4f1fc1cec01de6836e95eb09a23eb18034d04cad84cd846ec095f23fbc8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/references/research/04-external-views.md", + "target": "app/游资skills/niepanchongsheng-perspective/references/research/04-external-views.md", + "bytes": 515, + "sha256": "49a432b656672ad11ca2542d3ec438750635d47e3ded1dcf73f94c04169918d9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/references/research/05-decisions.md", + "target": "app/游资skills/niepanchongsheng-perspective/references/research/05-decisions.md", + "bytes": 393, + "sha256": "46eff643e1b96f32a65f146a092b7d3f9553643fbbf0ecd3a5ce7b3722293917", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/niepanchongsheng-perspective/references/research/06-timeline.md", + "target": "app/游资skills/niepanchongsheng-perspective/references/research/06-timeline.md", + "bytes": 383, + "sha256": "9577219e99e2d0a76ace87d78092fd8e36f6dd1f621a1d44031d4b98beb99a5f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/SKILL.md", + "target": "app/游资skills/qiaobangzhu-perspective/SKILL.md", + "bytes": 6078, + "sha256": "d46be5a1ebeedd8bea181c115c4d9b162e749a3270d2be1681820348304303b6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/references/research/01-writings.md", + "target": "app/游资skills/qiaobangzhu-perspective/references/research/01-writings.md", + "bytes": 635, + "sha256": "01f7963379f403811cfa5a9c6a0530e0ba9b9a5ad72328fbc62bdd376ffdd7e8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/references/research/02-conversations.md", + "target": "app/游资skills/qiaobangzhu-perspective/references/research/02-conversations.md", + "bytes": 305, + "sha256": "4f7dae9a2c1e48af7d2fffb6358b595032c44aae5669366c8b94050c6189a27c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/qiaobangzhu-perspective/references/research/03-expression-dna.md", + "bytes": 324, + "sha256": "8270f8e44aedc5cfe0daae4ddea7220cce5e25f462685ce20228c885df1d616f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/references/research/04-external-views.md", + "target": "app/游资skills/qiaobangzhu-perspective/references/research/04-external-views.md", + "bytes": 301, + "sha256": "ddfa1e53d1103ab0a90bbca5fdd1b5cbfdc9d629514d0e1ea81227e7dffe2006", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/references/research/05-decisions.md", + "target": "app/游资skills/qiaobangzhu-perspective/references/research/05-decisions.md", + "bytes": 320, + "sha256": "ddc4df06c064914241d8a2670f816f6551db8449b836b9ec32eacf5e309e0058", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/qiaobangzhu-perspective/references/research/06-timeline.md", + "target": "app/游资skills/qiaobangzhu-perspective/references/research/06-timeline.md", + "bytes": 372, + "sha256": "cc94f779716053313b684f013882323ae76908c48902a9d1f05e780561d1931a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/SKILL.md", + "target": "app/游资skills/ruihexian-perspective/SKILL.md", + "bytes": 6108, + "sha256": "3357d3a4e6522cbf30abc741a6f1db4778869f0ecf6f57c1450a1028b3c126b2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/references/research/01-writings.md", + "target": "app/游资skills/ruihexian-perspective/references/research/01-writings.md", + "bytes": 598, + "sha256": "343823b2f136e0938f665caca4feda14b9e7e2ca3837da5ad138f0729e478a9e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/references/research/02-conversations.md", + "target": "app/游资skills/ruihexian-perspective/references/research/02-conversations.md", + "bytes": 351, + "sha256": "f87b80b20a80409194c84daafb18957a15bf001ef25c51841e01c91afb43a2c4", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/ruihexian-perspective/references/research/03-expression-dna.md", + "bytes": 270, + "sha256": "ff0c6d39b604a11103d95226a23d849dbac92d57d0595e8d9a4c0679358a1cb2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/references/research/04-external-views.md", + "target": "app/游资skills/ruihexian-perspective/references/research/04-external-views.md", + "bytes": 372, + "sha256": "e3e3bbc69e76549c25f96b167ba96a92f303f677edb39359854403e9f1a03a68", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/references/research/05-decisions.md", + "target": "app/游资skills/ruihexian-perspective/references/research/05-decisions.md", + "bytes": 305, + "sha256": "c97e19375902e0ed1e2a6136268e54e4468ef89645f07f3b6830a020454c8706", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/ruihexian-perspective/references/research/06-timeline.md", + "target": "app/游资skills/ruihexian-perspective/references/research/06-timeline.md", + "bytes": 366, + "sha256": "177e7481ba670ef111f4a880cee68672217b213b8fc159f4167a9ac4402bfac7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/SKILL.md", + "target": "app/游资skills/shuipi-perspective/SKILL.md", + "bytes": 9443, + "sha256": "9138be6dc9500b4f6095a11cfe909f24216dc86ae42db203ffcc6a7e8cdab272", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/references/research/01-writings.md", + "target": "app/游资skills/shuipi-perspective/references/research/01-writings.md", + "bytes": 1574, + "sha256": "933dd729a8eb03aeda5256fb9d2d198c65f326e693b21d845df7dc7ea96e795c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/references/research/02-conversations.md", + "target": "app/游资skills/shuipi-perspective/references/research/02-conversations.md", + "bytes": 542, + "sha256": "6655dd705da90a015dcfe5206319db7afa145338199ff436560e70ccb8191661", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/shuipi-perspective/references/research/03-expression-dna.md", + "bytes": 690, + "sha256": "177b23692a1cf55a628655bbd55a54c1e22ed18889ae5f153e42e181d1ec4b4e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/references/research/04-external-views.md", + "target": "app/游资skills/shuipi-perspective/references/research/04-external-views.md", + "bytes": 740, + "sha256": "d7d4eb08910349e1da91bb663959be053c3cd876a0ac470135057e52aae85ef7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/references/research/05-decisions.md", + "target": "app/游资skills/shuipi-perspective/references/research/05-decisions.md", + "bytes": 967, + "sha256": "3b895972afdf1dda5befb24c1a4f1eac93da12e6d130d5d00ec7d13a9899f45b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/shuipi-perspective/references/research/06-timeline.md", + "target": "app/游资skills/shuipi-perspective/references/research/06-timeline.md", + "bytes": 530, + "sha256": "16a7c268575fb15f36abb318d11979fa4415b5aa9f0d9277cf7bf6d36e9abd15", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/SKILL.md", + "target": "app/游资skills/sunge-perspective/SKILL.md", + "bytes": 5907, + "sha256": "fa2e1501a712c689dd8beaa7b2c90e4920e163dad9ead6e30dcd9565019f1b09", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/references/research/01-writings.md", + "target": "app/游资skills/sunge-perspective/references/research/01-writings.md", + "bytes": 716, + "sha256": "ad4ad5b6ae03def94c3a0f73c7941d001cc6596f9440f6a723b2d5bb72ff7d96", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/references/research/02-conversations.md", + "target": "app/游资skills/sunge-perspective/references/research/02-conversations.md", + "bytes": 285, + "sha256": "e190b12d34933905149462796be3126ebb25f3ae1ac8a853895849f7c1ba5a6e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/sunge-perspective/references/research/03-expression-dna.md", + "bytes": 221, + "sha256": "e4bdce779230bda607aa385081b3ff336a915c06009df9de42329b1826eb5312", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/references/research/04-external-views.md", + "target": "app/游资skills/sunge-perspective/references/research/04-external-views.md", + "bytes": 351, + "sha256": "3a49d9d5d7e1a67de357699e26c1a8bbd5d7109d3acf08d4d8bb64d477e4256e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/references/research/05-decisions.md", + "target": "app/游资skills/sunge-perspective/references/research/05-decisions.md", + "bytes": 269, + "sha256": "22e9bddc154b1647e7107df9455b74f3de5339671b6236d50e26a0e041679879", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/sunge-perspective/references/research/06-timeline.md", + "target": "app/游资skills/sunge-perspective/references/research/06-timeline.md", + "bytes": 358, + "sha256": "3cc5e5a0bdb945b766e7a28e3505ba182562ecd29f023ca171341d36ebaa2ee0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/SKILL.md", + "target": "app/游资skills/xiaoe-perspective/SKILL.md", + "bytes": 5396, + "sha256": "ac1c8b9e90e03ee02f1f83f8500cff08f4a33539dc705d1472e15b7d95ecd9f2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/references/research/01-writings.md", + "target": "app/游资skills/xiaoe-perspective/references/research/01-writings.md", + "bytes": 534, + "sha256": "51926097f3f3662e2d1476a783ab161cf92fc74b5af9f34015a13b1fa69c08c6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/references/research/02-conversations.md", + "target": "app/游资skills/xiaoe-perspective/references/research/02-conversations.md", + "bytes": 265, + "sha256": "c22526a4867ddf793c94bd20967ef7c4d217edc3044c06b4a08e6ef53443a6fe", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/xiaoe-perspective/references/research/03-expression-dna.md", + "bytes": 188, + "sha256": "b62b50b1407ca10d53aa60dfa73acfab23e40437dfb7a906df978951382feaf0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/references/research/04-external-views.md", + "target": "app/游资skills/xiaoe-perspective/references/research/04-external-views.md", + "bytes": 438, + "sha256": "de9259718eb975181da8104a3c87c897d69462f372b93d568346204a0fd4e94e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/references/research/05-decisions.md", + "target": "app/游资skills/xiaoe-perspective/references/research/05-decisions.md", + "bytes": 260, + "sha256": "061a9427db899ae42ca1d5c40863cb17341c02927a5e638debd12541f0d37215", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xiaoe-perspective/references/research/06-timeline.md", + "target": "app/游资skills/xiaoe-perspective/references/research/06-timeline.md", + "bytes": 348, + "sha256": "cdf95e4c6e431bb4d111a9860e9eee71c16be3370980fa309f0e7c532f60cf65", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/SKILL.md", + "target": "app/游资skills/xuxiang-perspective/SKILL.md", + "bytes": 6253, + "sha256": "43433473f68bf7160d3395b305b668e6028388f71db07447a45db1a702844ed8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/references/research/01-writings.md", + "target": "app/游资skills/xuxiang-perspective/references/research/01-writings.md", + "bytes": 658, + "sha256": "bb63a21e80a6954d86166d558ac18f1ba35dc41b0bcf13189ffd0c31818e4718", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/references/research/02-conversations.md", + "target": "app/游资skills/xuxiang-perspective/references/research/02-conversations.md", + "bytes": 383, + "sha256": "32d7d0db40cefc02606ee92cdbc6f6290ac3a781f9e170863467f2d54c7a720b", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/xuxiang-perspective/references/research/03-expression-dna.md", + "bytes": 254, + "sha256": "315af2a7a8ac479902895f3ae1b347ac1fbdc2d681ea0835cb2d7f1e42b54d2e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/references/research/04-external-views.md", + "target": "app/游资skills/xuxiang-perspective/references/research/04-external-views.md", + "bytes": 550, + "sha256": "dac268c0699ab3ae33aa9a18225559fd2292532a8e1a2dd69555c3386e1dba97", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/references/research/05-decisions.md", + "target": "app/游资skills/xuxiang-perspective/references/research/05-decisions.md", + "bytes": 409, + "sha256": "30a8dedfa9fbc1a9d6001a7be1a4f50254ead84856900acdb846e2552758c881", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/xuxiang-perspective/references/research/06-timeline.md", + "target": "app/游资skills/xuxiang-perspective/references/research/06-timeline.md", + "bytes": 377, + "sha256": "eae3b31aa2350778e5bf28c685561aefcfc17312bae7191e2e09330dc78b9102", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/SKILL.md", + "target": "app/游资skills/zhangdetao-perspective/SKILL.md", + "bytes": 15908, + "sha256": "30d645e0d143032ebe0563191cbf3d8f01ac522012156a3fe91aaa2951cfca58", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/research/01-writings.md", + "target": "app/游资skills/zhangdetao-perspective/references/research/01-writings.md", + "bytes": 3566, + "sha256": "b2f4dceec178f83d3ca73c0a9c3e3d253cef49cd38ada0319a48463b8f64daa5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/research/02-conversations.md", + "target": "app/游资skills/zhangdetao-perspective/references/research/02-conversations.md", + "bytes": 1891, + "sha256": "7702e345e81c831fbee6de42c61651ad41e4f555a52edbac335228093e195a6d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/zhangdetao-perspective/references/research/03-expression-dna.md", + "bytes": 1844, + "sha256": "67261e4f352ef418465e662f5924c6418da2e32d732c4defe89643e8ad86aa03", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/research/04-external-views.md", + "target": "app/游资skills/zhangdetao-perspective/references/research/04-external-views.md", + "bytes": 1258, + "sha256": "d390f4949f2a2f6f47bee5eeff8c5f7633ac30970bf0263a2371c94afa294ff9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/research/05-decisions.md", + "target": "app/游资skills/zhangdetao-perspective/references/research/05-decisions.md", + "bytes": 2054, + "sha256": "07a7ab4e45d8cf1eea09d0e7192d59c3a2ebe12db5769b1113cd3d062c148788", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/research/06-timeline.md", + "target": "app/游资skills/zhangdetao-perspective/references/research/06-timeline.md", + "bytes": 705, + "sha256": "5afc9141722b2796ae5b502ceb04a41fbb1a939e63d10db1e7b7d0d6cca3f054", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/10第十节:心法与量的结合运用(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/10第十节:心法与量的结合运用(录播).txt", + "bytes": 61922, + "sha256": "b22c873bc779500ccc8e49d49d3a9f30aea4377eb0e9039891771192524e4103", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/11第十一节:主力资金潜伏解析(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/11第十一节:主力资金潜伏解析(录播).txt", + "bytes": 57316, + "sha256": "f194c2cd8122eab90ddbcd01ad42d4778b15fb329dd2a8344bd0605ed8e02f1a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/12第十二节:主线擒龙之首期龙(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/12第十二节:主线擒龙之首期龙(录播).txt", + "bytes": 51832, + "sha256": "b66b4c516f3c5b9fe2d5fd4ceadecc1e84d9fcfe33e7961f67f9da52564ab8fc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/13第十三节:主线擒龙之补涨龙(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/13第十三节:主线擒龙之补涨龙(录播).txt", + "bytes": 94061, + "sha256": "7d33c020056262109119477f39d99161ed6ce683a5038f936d0df0cbc7b152fa", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/14第十四节:无为战法之登高望远(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/14第十四节:无为战法之登高望远(录播).txt", + "bytes": 61015, + "sha256": "74821310485b93b3d4373721c15c6fb553ad2adc4abe0fb99371453ed7d777ee", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/1第一节:投资的系统思维(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/1第一节:投资的系统思维(录播).txt", + "bytes": 90200, + "sha256": "37e5867ae67750b18dd804f4ca7f12ba4c8db40629d72e8d0bec4aa9f88d71f2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/2第二节:无为心法之速度(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/2第二节:无为心法之速度(录播).txt", + "bytes": 67391, + "sha256": "386b70a2d42cb788d2fd242563f73eb5e0c90e1567b46610ad7f9e2c23e75f44", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/3第三节:无为心法之角度强化(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/3第三节:无为心法之角度强化(录播).txt", + "bytes": 61273, + "sha256": "184720869b51299efe26a47a66cf60902fde64b04d3cd1424878693399391a6f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/4第四节:无为心法之弧度下篇(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/4第四节:无为心法之弧度下篇(录播).txt", + "bytes": 57897, + "sha256": "b78158c535e67e7e0ede06b75f8bf362152263315101385bedb4895b4e0342f6", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/5第五节:主线板块的选择(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/5第五节:主线板块的选择(录播).txt", + "bytes": 52504, + "sha256": "11dc441ea5e86cd00cf4450bfd25fbe952003d4130bcb28cf4707aeafb4e6146", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/6第六节:板块轮动逻辑与分类(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/6第六节:板块轮动逻辑与分类(录播).txt", + "bytes": 85408, + "sha256": "39ed0704377494981693c9ec052a4e9525028302af3205ff299444242fff659e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/7第七节:把握主线板块轮动(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/7第七节:把握主线板块轮动(录播).txt", + "bytes": 66922, + "sha256": "add6e027056ffaa1f47f30626486c4ba81fd1d7e0f5cd0252ac1eb17717ac0b1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/8第八节:成交量的本质与运用(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/8第八节:成交量的本质与运用(录播).txt", + "bytes": 90088, + "sha256": "bd4454aa929b739d17d6e0ecb8ac8538414ce68a71053f92b6948852783cc6f3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/9第九节:主力资金沉淀(录播).txt", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/9第九节:主力资金沉淀(录播).txt", + "bytes": 60887, + "sha256": "82d92dd866b9906132c8735c6cc6c59014aec1e2d0aab4acf69739bcb1a0a8b2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangdetao-perspective/references/sources/transcripts/_status.json", + "target": "app/游资skills/zhangdetao-perspective/references/sources/transcripts/_status.json", + "bytes": 1129, + "sha256": "f4b29daa4b4d83883a4ef692d540ef6bbd027790d8c6db917c9fc44fcbddbb53", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/SKILL.md", + "target": "app/游资skills/zhangmengzhu-perspective/SKILL.md", + "bytes": 5879, + "sha256": "8ce979f067bf2c786a05664fc3ed8a49fcf1c97f5018c2e03e71b608b95b2988", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/references/research/01-writings.md", + "target": "app/游资skills/zhangmengzhu-perspective/references/research/01-writings.md", + "bytes": 621, + "sha256": "edabfd14df9645893164129574921afc634050f0a5321aad32549dffa0703bcd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/references/research/02-conversations.md", + "target": "app/游资skills/zhangmengzhu-perspective/references/research/02-conversations.md", + "bytes": 311, + "sha256": "59c836cdae7393edf89ec9fb66b71ba09be2c637f380d4b67a60f19c37a11be3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/zhangmengzhu-perspective/references/research/03-expression-dna.md", + "bytes": 288, + "sha256": "695453213593d924b4bc49e063252ba01ccca9925af523e4b27c75da0216fe7d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/references/research/04-external-views.md", + "target": "app/游资skills/zhangmengzhu-perspective/references/research/04-external-views.md", + "bytes": 464, + "sha256": "a4ce100e1062238aa7e3313b46d4ecde792bbf1307173e6f184e5567f4adff61", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/references/research/05-decisions.md", + "target": "app/游资skills/zhangmengzhu-perspective/references/research/05-decisions.md", + "bytes": 388, + "sha256": "cb73d04c3a126f3f5fb565b8f4b3d822a010456d0fdd9f7abc3664ce84d00b66", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhangmengzhu-perspective/references/research/06-timeline.md", + "target": "app/游资skills/zhangmengzhu-perspective/references/research/06-timeline.md", + "bytes": 367, + "sha256": "d60d612efb85b881e82588676b0aa87c2a90af3f306eef3bf4e97da7587e40d5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/SKILL.md", + "target": "app/游资skills/zhaolaoge-perspective/SKILL.md", + "bytes": 6429, + "sha256": "b92d3072581c3f7f0178980ffbe8e38094b5b12490e0cadd8fb44bfe702e2dce", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/references/research/01-writings.md", + "target": "app/游资skills/zhaolaoge-perspective/references/research/01-writings.md", + "bytes": 521, + "sha256": "e56860be39a4cdc18a64695794796ee6033224abf42e4b4da42fe654365d6141", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/references/research/02-conversations.md", + "target": "app/游资skills/zhaolaoge-perspective/references/research/02-conversations.md", + "bytes": 336, + "sha256": "7a2ea62fbe67e76b31239b15c54decc762b6473895cfbe7ea5aa02e85d858845", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/zhaolaoge-perspective/references/research/03-expression-dna.md", + "bytes": 269, + "sha256": "1ec03cc9ab0634c1e048e52ee8f658b4d25f98cac049c9e0814a5d70c73ef9d0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/references/research/04-external-views.md", + "target": "app/游资skills/zhaolaoge-perspective/references/research/04-external-views.md", + "bytes": 552, + "sha256": "b284fb48327a4ef6f2e014a7b17b3fb404f7b4d184f39d83ab28659bf63fd13d", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/references/research/05-decisions.md", + "target": "app/游资skills/zhaolaoge-perspective/references/research/05-decisions.md", + "bytes": 418, + "sha256": "a3af9a1ec222944c327251aa0587537743e2027fff7c225ab16ce62ef66bcc49", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhaolaoge-perspective/references/research/06-timeline.md", + "target": "app/游资skills/zhaolaoge-perspective/references/research/06-timeline.md", + "bytes": 365, + "sha256": "1254e68558795696061dcca22260aeef56693adfb91783b326802d743bb18e9c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/SKILL.md", + "target": "app/游资skills/zhiyechaoshou-perspective/SKILL.md", + "bytes": 6531, + "sha256": "940e232d8fcda5b293499075ed7bfa0be1fd14cf54d6489f4cef97d2fca66db8", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/references/research/01-writings.md", + "target": "app/游资skills/zhiyechaoshou-perspective/references/research/01-writings.md", + "bytes": 654, + "sha256": "65a5e323a4b030c730bbf6d1c7c342fe1c2be4d6d515535356842b7c14bfc4f5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/references/research/02-conversations.md", + "target": "app/游资skills/zhiyechaoshou-perspective/references/research/02-conversations.md", + "bytes": 338, + "sha256": "6a31c92aff32b19e0f489c6985e4d624e69334b29f8d98891205e725cdfc5bf4", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/zhiyechaoshou-perspective/references/research/03-expression-dna.md", + "bytes": 279, + "sha256": "8b842df2b0ba30fce2d22820cca8a5b5cad9fc5ecf639584184cfe4c3b72c1fa", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/references/research/04-external-views.md", + "target": "app/游资skills/zhiyechaoshou-perspective/references/research/04-external-views.md", + "bytes": 386, + "sha256": "402ec2809c50048a7a76dc50d931616c23279effea0f81ff288cc94575152b09", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/references/research/05-decisions.md", + "target": "app/游资skills/zhiyechaoshou-perspective/references/research/05-decisions.md", + "bytes": 315, + "sha256": "09c8ed46634b7995da9a238a91a0f99f255706303b89bb6e09b0cc8c52a0e8c9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zhiyechaoshou-perspective/references/research/06-timeline.md", + "target": "app/游资skills/zhiyechaoshou-perspective/references/research/06-timeline.md", + "bytes": 394, + "sha256": "a87fa93e554b01de17ead743d50053259a4f216e07d5cb6ed4ba648cac74d6a2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/SKILL.md", + "target": "app/游资skills/zuoshouxinyi-perspective/SKILL.md", + "bytes": 5856, + "sha256": "42bc86eadbdb49bf1d612d6b6219011d743ad82903b2df5a26734a56990346c7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/references/research/01-writings.md", + "target": "app/游资skills/zuoshouxinyi-perspective/references/research/01-writings.md", + "bytes": 529, + "sha256": "45a525a0e84c4b404ce00f394c183cc606c45a8d3fb2df8ee9c73e54d8c733cd", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/references/research/02-conversations.md", + "target": "app/游资skills/zuoshouxinyi-perspective/references/research/02-conversations.md", + "bytes": 279, + "sha256": "f6c7b4ccf86163c4bc4d8280098197cd2710453de97f3d04c328939fb27c9416", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/zuoshouxinyi-perspective/references/research/03-expression-dna.md", + "bytes": 221, + "sha256": "2256eb194351b03c9cd896756870e64cf1f576a69c52ad87270693baf8b25c1f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/references/research/04-external-views.md", + "target": "app/游资skills/zuoshouxinyi-perspective/references/research/04-external-views.md", + "bytes": 370, + "sha256": "5e913c25ae42f65805c57aab95c2d001d351e5ab16aae6ce6a99390a5768b5d1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/references/research/05-decisions.md", + "target": "app/游资skills/zuoshouxinyi-perspective/references/research/05-decisions.md", + "bytes": 329, + "sha256": "47097f6a15acfbce2cb555ced5a038f28911de958b014f60759d27a41b46dc0a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/zuoshouxinyi-perspective/references/research/06-timeline.md", + "target": "app/游资skills/zuoshouxinyi-perspective/references/research/06-timeline.md", + "bytes": 321, + "sha256": "fe9d073824d5cddd74cbaebe3fdacb13de5ec0a3db5767129f2fc475fa009cec", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/SKILL.md", + "target": "app/游资skills/六一中路-perspective/SKILL.md", + "bytes": 12747, + "sha256": "7872a0544e15eb77ed072b11ccc5ffea67b20da7fdc63ee63b1785c224192e9f", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/phase4-validation.md", + "target": "app/游资skills/六一中路-perspective/references/phase4-validation.md", + "bytes": 6315, + "sha256": "8dd9aede5b3226a825e83223637402d7b86cdb568c9ded6b43f7e512a4818a97", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/phase5-creator.md", + "target": "app/游资skills/六一中路-perspective/references/phase5-creator.md", + "bytes": 8248, + "sha256": "188d1282cbeeb570d5cd20fce8802eb19f753e0698c0daebe99ed8d6ac9f5ca2", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/phase5-optimizer.md", + "target": "app/游资skills/六一中路-perspective/references/phase5-optimizer.md", + "bytes": 15454, + "sha256": "286afd9e438669516065f385858e8ed366c0dff5d59557c28c45d49980ac2f8e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/research/01-writings.md", + "target": "app/游资skills/六一中路-perspective/references/research/01-writings.md", + "bytes": 9496, + "sha256": "c4849305411fe5b01f48476b854d9e507e8a345497498d7407f0249ca5eeaaae", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/research/02-conversations.md", + "target": "app/游资skills/六一中路-perspective/references/research/02-conversations.md", + "bytes": 16207, + "sha256": "618d8f3b31afeca184f6be5cd8607fa0a990892b39e61a8d06de3fe40154191a", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/六一中路-perspective/references/research/03-expression-dna.md", + "bytes": 11307, + "sha256": "059d80ac08e2ce9edaac379bfe3a80a5bd0a8b8906212b2174f55f23d43c8235", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/research/04-external-views.md", + "target": "app/游资skills/六一中路-perspective/references/research/04-external-views.md", + "bytes": 14787, + "sha256": "09a27c7acd943652435e4255f1109b609e60a77f30ad5666833465d91e5cea59", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/六一中路-perspective/references/research/05-decisions.md", + "target": "app/游资skills/六一中路-perspective/references/research/05-decisions.md", + "bytes": 8566, + "sha256": "2a2f92f416374b5571bcd88d2114dc02037171ea09e68fdb4b50a71cfb4e582c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/SKILL.md", + "target": "app/游资skills/炒股养家-perspective/SKILL.md", + "bytes": 19405, + "sha256": "a92b35d24c5c6c15823b26e31609398fcfce9e30a750352b12b165a765fe695e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/phase2-synthesis.md", + "target": "app/游资skills/炒股养家-perspective/references/phase2-synthesis.md", + "bytes": 13972, + "sha256": "7f888cfa608b30c773a7623ecee899d6f0d5f556958d2eaefbabf660bbee618c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/phase4-validation.md", + "target": "app/游资skills/炒股养家-perspective/references/phase4-validation.md", + "bytes": 10164, + "sha256": "2607d01ba601d97fbcf2edcb2da33df98b349b87cf6674175851577c83c5a948", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/phase5-creator.md", + "target": "app/游资skills/炒股养家-perspective/references/phase5-creator.md", + "bytes": 11691, + "sha256": "ccc598c8e14a07851c8de57bad09c68ba794519556e195fda74aafdad27d23c3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/phase5-optimizer.md", + "target": "app/游资skills/炒股养家-perspective/references/phase5-optimizer.md", + "bytes": 11006, + "sha256": "d4d9d783faab35ec72d9c3276406b00524a0e7af39ec63906e1342217eebeb11", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/research/01-writings.md", + "target": "app/游资skills/炒股养家-perspective/references/research/01-writings.md", + "bytes": 16659, + "sha256": "b37940446e0e4fe7467bee51771e80635d2594bb16b560a6e0e435900601ed47", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/research/02-conversations.md", + "target": "app/游资skills/炒股养家-perspective/references/research/02-conversations.md", + "bytes": 12632, + "sha256": "a17df50371327585f73208b4034de660532f8bf6eeed47c6b2db02b1657e3b88", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/炒股养家-perspective/references/research/03-expression-dna.md", + "bytes": 14717, + "sha256": "ae8c11ea3a9d914802348bf94140c251fad7bfe0446a63e74e94ac2e9a9a5b04", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/research/04-external-views.md", + "target": "app/游资skills/炒股养家-perspective/references/research/04-external-views.md", + "bytes": 16203, + "sha256": "853fd4569f107bf33cac91d2a941b24569113b184ec9affddfa2b20ebd8e2a75", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/research/05-decisions.md", + "target": "app/游资skills/炒股养家-perspective/references/research/05-decisions.md", + "bytes": 16528, + "sha256": "205c05b7eabd34065184b96cc65408e52595118b02b50aeef6e4242b4a27de4c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/炒股养家-perspective/references/research/06-timeline.md", + "target": "app/游资skills/炒股养家-perspective/references/research/06-timeline.md", + "bytes": 17590, + "sha256": "9a7e9ea0b99762cfc0a391105e26c41fd3a60b295761824fc546e811e6058edc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/蒸馏总报告.md", + "target": "app/游资skills/蒸馏总报告.md", + "bytes": 3934, + "sha256": "f7630559c26103935ac37d2ef440c0d26377fdfe2b1c70c3e4fd81512899fd22", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/SKILL.md", + "target": "app/游资skills/退学炒股-perspective/SKILL.md", + "bytes": 17206, + "sha256": "8d03ac0d97a50704bfa86e6ad094d319b0b3253763d039a5ec0ff03ee0f097e5", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/phase4-validation.md", + "target": "app/游资skills/退学炒股-perspective/references/phase4-validation.md", + "bytes": 8758, + "sha256": "02721a90443b608f80dadc2c217e13f3dd8f9f7433959b6c08d629f7137200dc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/phase5-creator.md", + "target": "app/游资skills/退学炒股-perspective/references/phase5-creator.md", + "bytes": 10468, + "sha256": "eda63414fcd98c7dd48fc308f05b4cedba0f4c57c47ada0a67dc7d8c91f2f071", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/phase5-optimizer.md", + "target": "app/游资skills/退学炒股-perspective/references/phase5-optimizer.md", + "bytes": 12960, + "sha256": "14f5cd96df15a618a72134297328d037158914d1bc49af7aa9830a0c396f64e9", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/research/01-writings.md", + "target": "app/游资skills/退学炒股-perspective/references/research/01-writings.md", + "bytes": 17247, + "sha256": "33fdf9bd6d3ca87a7b0568c0c7616c2d40366ddf90ad405bebe704d6b3192fef", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/research/02-conversations.md", + "target": "app/游资skills/退学炒股-perspective/references/research/02-conversations.md", + "bytes": 18114, + "sha256": "c14cbadd99ff3f814b63bb74ccc7618203268e1f91c3e8df012c17130b6a15e1", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/退学炒股-perspective/references/research/03-expression-dna.md", + "bytes": 17213, + "sha256": "12a291f343325987a2088af2db8993efbaaa54e18b1efb39b34b63f3bb7e5c0c", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/research/04-external-views.md", + "target": "app/游资skills/退学炒股-perspective/references/research/04-external-views.md", + "bytes": 14536, + "sha256": "dd4dae6a20fd2ce6cf6f1568ad4bbf4750dac029a33bddb47c6a86d683eb2cf0", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/research/05-decisions.md", + "target": "app/游资skills/退学炒股-perspective/references/research/05-decisions.md", + "bytes": 11622, + "sha256": "27bf1f29b138d9287c7698ab8c7abc7c8a8d1f0d67da68c9dd1be54c753289da", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/退学炒股-perspective/references/research/06-timeline.md", + "target": "app/游资skills/退学炒股-perspective/references/research/06-timeline.md", + "bytes": 17610, + "sha256": "399b3cc79a141ec3d129f66038823365c38cfa6e72dd983a78079bf026084f5e", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/SKILL.md", + "target": "app/游资skills/陈小群-perspective/SKILL.md", + "bytes": 15215, + "sha256": "c9542b536bc9726172a487f1d78cb7f48b576c699c26b7399d068ab12555ab86", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/phase4-validation.md", + "target": "app/游资skills/陈小群-perspective/references/phase4-validation.md", + "bytes": 7672, + "sha256": "4fe261d8eb054d90c851694544bef8604f7877a2bd2578c68e0af99aa2672313", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/phase5-creator.md", + "target": "app/游资skills/陈小群-perspective/references/phase5-creator.md", + "bytes": 5520, + "sha256": "54bc27f45ed839a8977ff178efb5aea8d38b1eddb24d8b290088b714c09ddee7", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/phase5-optimizer.md", + "target": "app/游资skills/陈小群-perspective/references/phase5-optimizer.md", + "bytes": 10734, + "sha256": "86db34b32faa9c967ab3a87ffb9f12d77c114eaadf90b5f50f28e0bd11bd8467", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/research/01-writings.md", + "target": "app/游资skills/陈小群-perspective/references/research/01-writings.md", + "bytes": 16604, + "sha256": "47dbf99ab6e3aff6c4008f169f39363f36171c0c8cfc43ef3d4d642dae9ba771", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/research/02-conversations.md", + "target": "app/游资skills/陈小群-perspective/references/research/02-conversations.md", + "bytes": 17531, + "sha256": "a99d6df8f30176d8d3d30f67c3f86e7e3c82c0239a0e96d5930d0486dc4978f3", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/research/03-expression-dna.md", + "target": "app/游资skills/陈小群-perspective/references/research/03-expression-dna.md", + "bytes": 13726, + "sha256": "597e20a12add17b7cec27b0d80bfef5ca0edcb94cf3bb1cca8e19464737c64bc", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/research/04-external-views.md", + "target": "app/游资skills/陈小群-perspective/references/research/04-external-views.md", + "bytes": 15980, + "sha256": "3fe56f885f49eaa961cee492ad2166d9d2322ec5a6f68b41da9abd94dc37a961", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/research/05-decisions.md", + "target": "app/游资skills/陈小群-perspective/references/research/05-decisions.md", + "bytes": 19735, + "sha256": "e9878d86a8787c988026a003823fcd9b4bea8e0efe7094062ffa694d1b1149ae", + "disposition": "original_copy_pending_move", + "status": "identical" + }, + { + "source": "游资skills/陈小群-perspective/references/research/06-timeline.md", + "target": "app/游资skills/陈小群-perspective/references/research/06-timeline.md", + "bytes": 23133, + "sha256": "6ff62c5a5aa04901729420c91b40f5d8fb1c7e681ae81ac1f07c5295015ab48d", + "disposition": "original_copy_pending_move", + "status": "identical" + } + ] +} diff --git a/docs/migration/目标目录与切片顺序.md b/docs/migration/目标目录与切片顺序.md new file mode 100644 index 0000000..e0af03b --- /dev/null +++ b/docs/migration/目标目录与切片顺序.md @@ -0,0 +1,71 @@ +# 保真迁移目标目录与切片顺序 + +> 状态:已由用户确认 +> 生效日期:2026-07-30 + +本文件把已批准的`app/`目标结构和迁移顺序固化为可恢复约束。目录只表达职责,迁移时从 +原版复制、移动和拆分真实实现;禁止先建立空业务骨架后按规格书重写。 + +## 目标目录 + +```text +app/ + server.py # 最终仅保留进程入口与HTTP服务器组装 + backend/ + bootstrap/ # 路径、环境、配置和依赖容器 + http/ # 路由、鉴权、响应、静态资源和通用传输能力 + features/ + accounts/ # 登录、账号、会员及用户身份 + system/ # 管理员配置和运行状态 + market/ # 公共行情、搜索、详情和图表 + sentiment/ # 情绪周期 + pools/ # 涨停、炸板、跌停、昨日涨停和涨停表现 + ladder/ # 市场天梯 + rotation/ # 板块轮动 + auction/ # 集合竞价 + themes/ # 题材库 + popularity/ # 人气热榜 + dragon_tiger/ # 龙虎榜与游资档案 + screener/ # 阶段、策略、自定义选股及持续跟踪 + mentor/ # 问师 + heaven/ # 观势、观气、观心 + review/ # 自选、复盘笔记、交易日志和复盘助手 + alerts/ # 提醒中心 + data/ # 统一数据网关、口径、质量和供应商适配 + database/ # 连接、迁移和领域Repository + jobs/ # 后台任务定义、状态、调度和重试 + llm/ # 唯一模型网关、流式协议和调用审计 + frontend/ + index.html # 原版DOM骨架;仅在等价验证后拆分 + shared/ # API、状态、Shell、弹窗和通用组件 + pages// # 页面自己的行为与样式 + styles/ # 令牌、基础层、Shell和经验证后的公共样式 + vendor/ # 浏览器端第三方静态资产 + config/ # 页面、功能、API、任务及数据字段注册表 + data/ # SQLite及私有运行数据,保持Git忽略 + tests/ # 单元、契约、差异和浏览器回归 + tools/ # 清查、迁移、差异验证和维护工具 + vendor/ # Python离线依赖 + 游资skills/ # 原版公开Skill;私有Skill仍位于data/ +``` + +允许迁移期间保留根级兼容外壳;外壳只能转发到唯一实现,并须在账本登记删除条件。 + +## 固定切片顺序 + +| 切片 | 完整纵向范围 | +|---:|---| +| 00 | 原版可运行副本、资产清单、数据库副本和视觉基线 | +| 01 | 启动、HTTP通用能力、登录账号、会员和系统管理 | +| 02 | 公共行情、全局搜索、详情、悬浮图表、数据网关和数据质量 | +| 03 | 情绪周期、五类股池和涨停表现 | +| 04 | 市场天梯和板块轮动 | +| 05 | 集合竞价、题材库、人气热榜和龙虎榜 | +| 06 | 智能选股、自定义选股和策略持续跟踪 | +| 07 | 问师、模型Skill和LLM流式链路 | +| 08 | 问天:观势、观气和观心 | +| 09 | 我的复盘、自选、笔记、交易日志、提醒和复盘助手 | +| 10 | 前端Shell、页面文件、共享组件、CSS层级和移动端职责归位 | +| 11 | 待定代码试删、全量并行验收、维护文档和切换准备 | + +每个切片先记录原版证据,再移动实现,再执行同输入差异;未通过时不得进入下一切片。 diff --git a/docs/migration/重建迁移章程.md b/docs/migration/重建迁移章程.md new file mode 100644 index 0000000..cd3154f --- /dev/null +++ b/docs/migration/重建迁移章程.md @@ -0,0 +1,271 @@ +# 小白复盘重建迁移章程(本轮实施失败冻结) + +> 状态:失败冻结,禁止继续或部署 +> 建立日期:2026-07-30 +> 产品真相源:`docs/product/小白复盘-完整产品规格说明书.md` + +> 2026-07-30用户人工验收确认`next/`的视觉、布局和基础功能未达到原系统等价要求。 +> 本章程后续阶段记录只作为失败过程留档,不再构成完成证明。权威处置记录见 +> [`next失败冻结记录.md`](next失败冻结记录.md)。 + +## 1. 唯一目标 + +在当前仓库的`next/`目录内,从零重建小白复盘。新系统必须完整实现产品规格说明书定义的功能、权限、数据口径、交互状态、视觉和终端行为,同时显著减少重复实现、补丁层和隐式依赖,使后续人工维护可操作。 + +迁移不是对旧系统继续重构,也不是增加新产品功能。旧系统在迁移期间保持可运行,只用于读取业务事实、算法、必要数据和视觉资产。 + +## 2. 不可违反的约束 + +1. 产品规格说明书中的“已确认产品标准”优先于旧代码现状。 +2. 旧系统文件不移动、不批量改名、不作为新系统运行时依赖。 +3. 新系统开发数据库独立,不直接写入旧系统数据库。 +4. 不整文件复制旧`server.py`、`app.js`、样式覆盖层或巨型业务模块。 +5. 每项业务规则只保留一个权威实现。 +6. 全站只有一个浏览器API出口、一个数据网关、一个LLM网关、一个弹窗管理器和一套设计令牌。 +7. 页面只负责取数、组织状态和组合组件,不拥有跨页面业务计算。 +8. 外部数据源只能通过数据网关访问;公开网页源不得进入正式计算。 +9. LLM只解释或编译受控公式,不参与确定性行情、情绪、选股和问天计算。 +10. 用户私有数据的所有读写必须在服务端验证账号所有权。 +11. 兼容层只能用于迁移,必须登记删除条件;最终交付不得保留双实现。 +12. 不以“测试通过”替代产品验收;测试必须实际覆盖对应规格。 +13. 不以“目录已建立”或“接口已预留”宣称功能迁移完成。 +14. 不自动替换NAS生产容器;最终切换在全量验收后单独确认。 + +## 3. 技术与结构决策 + +### 3.1 技术栈 + +- 后端:Python、FastAPI、Pydantic。 +- 数据库:SQLite,显式Repository与有序Migration,不引入ORM双重抽象。 +- 前端:Vue 3、TypeScript、Vite、Pinia。 +- 单元与集成测试:pytest。 +- 浏览器验收:Playwright。 +- 部署:多阶段Docker构建,运行时保持单容器模块化单体。 + +### 3.2 目标一级结构 + +```text +next/ + frontend/ + src/ + shared/ + pages/ + app/ + backend/ + bootstrap/ + http/ + features/ + data/ + database/ + jobs/ + llm/ + config/ + tests/ + tools/ + docs/ +``` + +只预建稳定的一级边界。二、三级业务目录随纵向切片建立,不创建无真实职责的空目录树。 + +### 3.3 依赖方向 + +```text +浏览器页面 -> 前端共享层 -> HTTP接口 +HTTP/后台任务 -> 业务服务 -> Repository/DataGateway/LLMGateway -> 基础设施 +``` + +禁止反向依赖、跨功能直接读表、页面直接访问外部数据源,以及Controller中编写评分和持久化逻辑。 + +## 4. “做减法”验收标准 + +每个迁移切片必须证明: + +- 旧系统同一行为的多个实现已经在新系统收敛为一个。 +- 没有为了快速兼容复制第二份公式、请求逻辑或CSS组件。 +- 新增共享抽象至少有两个真实调用方,或明确消除一个高风险全局出口。 +- 页面专属样式不修改其他页面和全局Shell。 +- 临时代码有明确删除条件,不使用永久`legacy`、`v2-fix`、`override-final`式补丁层。 +- 重建后的文件按职责可读,不用巨型文件重新制造旧问题。 +- 仅统计代码行数下降不能证明成功;功能等价、唯一职责和可删除旧实现同时成立才算减法。 + +建议性文件规模门禁: + +- 前端页面容器目标不超过400行,超出时按稳定子组件拆分。 +- 后端业务服务目标不超过500行,复杂确定性算法可独立成纯计算模块。 +- 单个CSS文件目标不超过600行,按令牌、Shell、共享组件、页面、移动端分层。 +- 超过门禁必须在本章程记录原因,不能静默放宽。 + +## 5. 迁移方法 + +采用纵向切片。每个切片同时交付: + +1. 产品行为与状态。 +2. 权限和账号数据边界。 +3. 后端接口与Schema。 +4. 业务计算与数据访问。 +5. 前端页面、日间/夜间和响应式行为。 +6. 单元、契约、集成和浏览器测试。 +7. 与旧系统和产品规格的差异报告。 +8. Git提交和远端回档节点。 + +禁止先迁移全部HTML、再迁移全部接口、最后补业务逻辑。这会产生长期空壳和无法验收的中间状态。 + +## 6. 执行阶段 + +| 阶段 | 内容 | 完成证据 | 状态 | +|---:|---|---|---| +| 0 | 产品规格、迁移章程、旧系统只读基线 | 文档检查、Git节点 | 已完成 | +| 1 | `next/`最小可运行骨架与工具链 | 前后端启动、健康检查、基础测试 | 已完成 | +| 2 | 配置、错误、日志、数据库迁移、Repository基础 | 迁移回退和错误契约测试 | 已完成 | +| 3 | 账户、会话、权限、会员和系统配置 | 权限矩阵与跨账号测试 | 已完成 | +| 4 | 前端Shell、路由、状态、API、弹窗、主题和令牌 | 1080P/4K/390px Shell截图 | 已完成 | +| 5 | 数据网关、日期、快照、图表和搜索 | 来源/时间/缺失/降级测试 | 已完成 | +| 6 | 情绪周期、四类股池与涨停表现 | 算法固定样本、页面E2E | 已完成 | +| 7 | 市场天梯和板块轮动;回归涨停表现 | 结构统计与展开滚动验收 | 已完成 | +| 8 | 集合竞价、题材库、人气热榜和龙虎榜 | 生命周期、口径和空态验收 | 已完成 | +| 9 | 智能选股、36套策略、自定义选股和持续跟踪 | 109因子、确定性和隔离测试 | 已完成 | +| 10 | 问师、模型Skill、LLM流式网关 | 上下文路由、去重和回退测试 | 已完成 | +| 11 | 问天观势、观气、观心 | 公式、安全门、动画和历史验收 | 已完成 | +| 12 | 我的复盘、提醒和复盘助手 | 私有数据、汇总和弹窗验收 | 已完成 | +| 13 | 全站移动端重组和无障碍 | 320/390/430/768/横屏验收 | 已完成 | +| 14 | 数据迁移、Docker、备份恢复和性能安全 | 旧库副本迁移、回滚演练 | 已完成 | +| 15 | 全量验收、减法审计和切换准备 | 规格覆盖矩阵、最终报告 | 已完成 | + +阶段编号不会因为上下文压缩重新规划。只有发现产品规格自身矛盾时,才记录决策并调整阶段内容;不得通过新增阶段掩盖未完成工作。 + +## 7. 每阶段质量门禁 + +每次提交前至少执行: + +1. 格式、类型和静态检查。 +2. 受影响模块的单元测试。 +3. API契约和账号边界测试。 +4. 数据库迁移前进/回退测试(涉及数据库时)。 +5. Playwright关键流程(涉及运行时或前端时)。 +6. 日间/夜间和目标视口截图(涉及视觉时)。 +7. 浏览器控制台无未处理错误。 +8. 密钥、Token、日志和生成物扫描。 +9. 与产品规格固定验收案例的可追溯检查。 +10. `git diff --check`和工作区来源确认。 + +## 8. Git与回档 + +- 当前`main`保留旧系统可运行状态和新系统迁移过程。 +- 每个阶段至少一个独立提交,提交信息使用`rebuild(stage-N): ...`。 +- 阶段门禁通过后推送Gitea。 +- 不重写已推送历史,不使用破坏性重置。 +- 大阶段内可有多个小提交,但最终必须有明确阶段完成节点。 +- 规格说明书和本章程的变更与相应行为变更同提交或先提交。 + +## 9. 数据迁移与最终切换 + +- 开发期间只使用旧数据库的只读副本或脱敏样本。 +- 迁移工具可重复运行,并输出逐表数量、校验和、跳过项和失败项。 +- 首次完整迁移后进行账号、权限、共享快照和私有数据抽样比对。 +- 最终切换前停止旧系统写入,执行最终增量迁移,再启动新容器。 +- 保留旧镜像、旧数据库一致性备份和加密密钥,验证回退路径。 +- 未经最终确认,不停止或替换NAS现有容器。 + +## 10. 持续状态记录 + +每完成一个阶段,在本节追加: + +- 提交哈希和推送状态。 +- 实际完成证据。 +- 删除或避免的重复代码。 +- 未完成项和残余风险。 +- 下一阶段入口条件。 + +### 当前状态 + +- 阶段0已完成:产品规格说明书和迁移章程通过结构、表格和密钥扫描。 +- 产品规格说明书包含16个工作区、36套策略、109个因子和85个固定验收案例。 +- 旧系统保持原状。 +- 阶段1已完成,代码提交为`603e73d`:建立隔离的FastAPI与Vue 3/TypeScript/Vite骨架、唯一前端API客户端、统一安全错误外壳、设计令牌起点及前后端基础测试。 +- 后端门禁:Ruff通过,pytest为2项通过;存在1项FastAPI 0.141测试客户端上游弃用警告,阶段2改用显式ASGI传输层消除。 +- 前端门禁:类型检查通过,Vitest为1个文件/2项通过,Vite生产构建通过;依赖安装审计为0个已知漏洞。 +- 运行验收:`8780/api/health`返回开发环境健康状态,`5173`代理访问成功;1280x720浏览器实测无控制台错误、无横向溢出。 +- 减法证据:删除未使用的`jsdom`及37个传递依赖;禁止TypeScript生成重复JavaScript测试产物;未复制旧`server.py`、`app.js`或CSS覆盖层。 +- 阶段2已完成,代码提交为`d969d2c`:配置从环境唯一加载,SQLite连接启用WAL/外键/忙等待,迁移支持前进、显式回退、原子失败、校验和和连续历史校验。 +- Repository基础只建立被健康检查真实使用的数据库状态Repository,未创建通用CRUD或空业务目录;数据库维护CLI支持状态、升级及需二次确认的回退。 +- HTTP错误统一为`code/message/request_id`,404、验证错误、业务错误和未知异常均通过安全契约;请求编号同时写入响应头,未知异常不向前端泄露原文。 +- 日志采用结构化JSON、`Asia/Shanghai`时间、10MB/3份轮转和嵌套/字符串敏感值脱敏;运行健康检查可区分进程和数据库状态。 +- 阶段2门禁:Ruff通过,pytest为20项通过,前端2项测试、类型检查和生产构建通过;真实服务健康响应、请求编号及`+08:00`启动日志通过运行验收。 +- 阶段3已完成,代码提交为`f69972c`并已推送:首个注册账号成为管理员,后续账号为普通用户;管理员权限与会员状态独立,管理员开通会员后同时具有管理员和会员标识。 +- 会话Cookie为HttpOnly,CSRF使用Cookie与请求头双重校验;服务端只保存会话和CSRF哈希。修改密码保留当前会话并撤销其他会话,账号出生资料和系统凭据均加密落库且按权限隔离。 +- 会员管理支持1个月、3个月、12个月、3年和永久,续期从有效到期日继续计算;会员每日智能调用上限进入会员配置。管理员无需伪装成会员即可使用智能功能,普通非会员被服务端拒绝。 +- 模型池限制20个模型,首个模型自动成为主模型,支持独立选择主模型和辅助模型;选中模型不可删除,密钥不会通过管理接口返回。模型连通测试明确留给阶段10的唯一LLM网关,系统管理不建立第二个模型调用出口。 +- 减法证据:HTTP Schema从路由中拆出,路由由412行降至314行;系统凭据职责从账户服务拆出,最长业务服务由429行降至382行。未建立通用CRUD、旧账号兼容层、第二套权限判断或明文密钥读取接口。 +- 阶段3门禁:Ruff通过,pytest为40项通过;前端2项测试、类型检查和生产构建继续通过;数据库版本1和2的前进及倒序回退通过,真实账号密码和已提供令牌未进入`next/`。 +- 阶段3残余边界:账号与系统管理的前端交互属于阶段4;LLM成功调用计次和模型连通性属于阶段10,不在阶段3提前实现。 +- 阶段4已完成,代码提交为`3b75bf2`并已推送:登录注册、16项工作区注册表、PC/移动Shell、顶栏、摘要条、固定状态栏、主题、日期、账户菜单和系统管理前端均已接入。 +- 账户五项菜单独立可达;浏览器实际保存并重读个人出生资料。会员状态完整显示开通状态、到期、剩余时长、今日用量、今日剩余、功能对比和暂不可用加油包。 +- 管理员可按分类维护平台凭据、模型池、主辅模型与会员;非管理员不显示后台刷新和系统管理,直达管理路由会返回情绪周期,智能工作区保留同结构会员锁定态。 +- 前端只有一个工作区注册表、API客户端、会话Store、主题Store、弹窗Host和Toast Host。响应式规则从五处分散媒体查询收敛到唯一`mobile.css`;最长前端文件332行,组件样式未出现令牌文件之外的色值。 +- 阶段4门禁:Ruff和40项pytest通过;Vue类型检查、2个文件5项Vitest、Vite生产构建通过;2项Playwright覆盖管理员/普通用户、真实写入、Ctrl+K、主题持久化、弹窗、系统管理和多视口。 +- 视觉证据已保存于`next/docs/evidence/stage-4/`:日间/夜间1920×1080、夜间3840×2160和390×844;实测无横向溢出、弹窗居中、Shell尺寸与内容边距符合规范。 +- 阶段4残余边界:行情摘要值、真实搜索结果、后台刷新和各工作区业务内容属于阶段5及后续阶段;移动端逐页业务重组属于阶段13,未用占位页冒充完成。 +- 阶段5已完成,代码提交为`cf0ab70`并已推送:建立唯一`DataGateway`、四源职责策略、观测元信息、失败关闭质量门,以及交易日历、标的目录、行情摘要和图表序列的版本3数据库结构。 +- Tushare只承担权威交易日历、股票目录和日线入口;iFinD优先承担日K与分时展示,并支持顶层表格响应和Access Token失效后的Refresh Token重试;东方财富只允许作为展示分时兜底,策略层禁止其进入正式计算。腾讯职责已在策略中登记,但尚无本阶段真实消费者,因此未创建空Provider。 +- 日期契约区分请求日期、实际数据日期和观测时间;盘前空今日K线会被剔除,沿用最近真实快照时明确返回真实日期和说明,从未同步时不生成模拟数据。 +- 全局搜索按股票、板块、题材、指数固定分组,具备160毫秒防抖、键盘循环选择和明确状态;搜索预览与行情详情共用同一图表组件,日K上涨空心且影线不穿实体,分时范围固定9:30至15:00并包含昨收零轴和均价线。 +- 管理员行情管理增加交易日历和股票目录的真实同步入口;普通用户响应不显示供应商工程名称。完整行情后台任务、情绪摘要写入和各实体业务详情仍属于后续阶段,没有用本阶段基础页冒充完成。 +- 阶段5门禁:Ruff通过,pytest为46项通过;Vue类型检查、2个文件5项Vitest和Vite生产构建通过;3项Playwright覆盖既有Shell回归、摘要、搜索、日K/分时、日夜主题、1920×1080和390×844视口。组件CSS无令牌外色值,已提供密码和令牌未进入`next/`。 +- 减法证据:未复制旧`TushareClient`、`IfindHttpClient`、`MarketChartClient`或供应商缓存堆叠;所有外部访问收敛到一个网关和一份策略,搜索预览与详情没有重复图表实现;新增后端最长文件379行,低于章程400行目标。 +- 新系统进入阶段6:使用阶段5的交易日期、摘要存储和质量门迁移情绪周期与五类股池的确定性公式、固定样本和页面。 +- 阶段6已完成,代码提交为`59f6011`并已推送:以唯一日度市场快照交付情绪周期、涨停池、炸板池、跌停池、昨日涨停和涨停表现;管理员后台刷新接入同一快照任务,普通用户仍无管理入口。 +- 情绪温度严格实现五维权重、自适应历史百分位、系统健康门控、极端风险上限和六阶段状态机;权威涨跌停事件不完整或日线覆盖率低于98%时失败关闭并保留旧快照,未以日线推导或公开网页源静默补造事件。 +- 四类股票明细共用`PoolPage`和`DataTable`的搜索、筛选、排序、空态与CSV导出;涨停表现直接消费后端一次聚合的晋级、红盘、断板、炸板和跌停统计,7板以上动态扩展,不在前端复制分类公式。原因和风险线索无权威字段时保持空值。 +- 阶段6门禁:Ruff通过,pytest为49项通过;Vue类型检查、2个文件5项Vitest和Vite生产构建通过;4项Playwright覆盖阶段4/5回归及情绪、股池、动态7板、日夜主题、1920×1080、3840×2160和390×844视口,控制台无未处理错误且无页面横向溢出。 +- 阶段6视觉与验收证据位于`next/docs/evidence/stage-6/`。新增页面最长207行,页面CSS 118行;六个页面只消费一份`market_summaries.payload_json`,没有逐页重复表或第二套市场快照。 +- 原阶段表把“涨停表现”同时包含在阶段6“五类股池”和阶段7,属于范围重复。其完整实现已随单一快照在阶段6交付;阶段7只迁移市场天梯和板块轮动,同时把涨停表现纳入跨页回归,不再创建重复实现。 +- 新系统进入阶段7:复用阶段6的涨停结构快照,迁移市场天梯的动态梯队、展开收起与排序,以及板块轮动的九日Top12、跨日高亮、排序和成分股。 +- 阶段7已完成,代码提交为`a76d344`并已推送:市场天梯支持动态层级、断层、等宽个股单元格、两种排序、展开收起和导出;板块轮动支持九日Top12、日期正逆序、跨日高亮和指定交易日申万二级成分股。 +- 天梯、轮动、情绪和股池继续共用唯一日度市场快照;涨停表现只回归阶段6实现。板块成分股只增加版本4的专用快照缓存,未建立第二套轮动表或通用缓存框架。 +- 行情快照采集已从直接创建供应商客户端收敛到`DataGateway`;供应商策略、计算用途限制和成分股读取均经同一网关,消除业务服务绕过数据治理层的出口。 +- 阶段7门禁:Ruff通过,pytest为50项通过;Vue类型检查、2个文件5项Vitest和Vite生产构建通过;5项Playwright覆盖阶段4至7回归、日夜主题、展开滚动、1920×1080和390×844视口,控制台无未处理错误且无横向溢出。 +- 阶段7视觉与验收证据位于`next/docs/evidence/stage-7/`。新增页面分别为106行和126行,市场页面样式总计415行,均低于章程门禁;已提供密码和令牌未进入`next/`。 +- 阶段8已完成,代码提交为`976a5ca`并已推送:集合竞价实现盘前归档、9:15至9:25动态观察、9:25选定及盘后归档,重点异动、我的自选、全部候选、竞价一字和成交额历史共用同一标准化口径。 +- 题材库区分题材行情与成分股缺失状态,题材悬浮预览复用阶段5的统一图表组件;人气热榜区分同花顺、东方财富和双榜共识,单源数据不会伪装成共识;龙虎榜明确区分无上榜、明细缺失、全部未识别、请求不可用及部分/完整识别状态。 +- 竞价共享归档不保存用户私有内容,“我的自选”在响应边界按认证账号即时合成。自选股使用独立版本6 Migration,避免修改已执行迁移;跨账号Repository测试确认记录互不可见。 +- 阶段8门禁:Ruff通过,pytest为58项通过;Vue类型检查、2个文件5项Vitest和Vite生产构建通过;6项Playwright覆盖阶段4至8回归、日夜主题、1920×1080和390×844视口,控制台无未处理错误且无移动端横向溢出。 +- 阶段8视觉与验收证据位于`next/docs/evidence/stage-8/`。新增页面最长108行、页面样式168行,后端最长纯计算模块492行;没有复制旧系统巨型文件、通用CRUD、通用缓存、供应商客户端或兼容层。 +- 新系统进入阶段9:迁移智能选股、36套策略、自定义选股和持续跟踪;以产品规格定义的109个因子、盘后自动执行边界、策略确定性、无信号与数据不足分离、账户隔离作为完成条件,不以精简策略或占位接口冒充迁移完成。 +- 阶段9已完成:建立109因子目录、7套阶段策略、29套独立策略、受控确定性公式、自定义选股、盘后调度和手动持续跟踪;阶段策略受实际情绪阶段匹配,29套策略不受阶段门控。 +- 选股结果严格区分数据不完整与完整数据下无信号;财务因子遵守公告日期,缺失值不转为零,同分按标识稳定排序。公开网页数据和LLM均不参与候选计算。 +- 自定义策略、运行结果和跟踪记录按账号隔离,运行选股不会自动加入跟踪;跟踪统计包含T+1开盘/收盘、T+3/T+5收盘、最大涨幅和最大回撤,T+1/T+5事件具备持久唯一性。 +- 阶段9门禁:Ruff通过,pytest为69项通过;Vue类型检查、2个文件5项Vitest和Vite生产构建通过;8项Playwright覆盖阶段4至9全量回归、非会员锁定、日夜主题、1920×1080与390×844,控制台无未处理错误且无移动端横向溢出。 +- 阶段9视觉与验收证据位于`next/docs/evidence/stage-9/`。未复制旧系统2118行选股实现;后端最长文件448行、页面容器最长169行、选股样式102行,均低于章程门禁。 +- 阶段9残余边界:自然语言转公式必须在阶段10经唯一LLM网关实现;完整IC动态加权未以基础多因子冒充。NAS生产容器保持不变。 +- 新系统进入阶段10:迁移问师、思维模型Skill、数据上下文路由和唯一LLM流式网关,并验证重复输出、计次、限流、主辅模型回退和中断恢复。 +- 阶段10已完成,代码提交为`f1fa104`并已推送:23个公开思维模型由文件目录自动发现,私有Skill使用受Git忽略的数据目录且仅管理员可见;前端只显示A/B/C证据等级。 +- 问师上下文按情绪、首板、龙头、趋势、低吸承接和宏观六类路由,龙虎榜按问题触发,单次最多匹配两个标的;上下文仅读取本地快照和缓存图表,不因提问触发全市场外部刷新。 +- 唯一LLM网关统一会员鉴权、每日额度、主辅模型、请求与尝试审计和安全错误;仅首字前失败允许回退,首字后中断保留部分结果且不重放,一次业务请求最多结算一次成功额度。 +- 会话、顺序和置顶按账号隔离,会话进一步按模型和交易日隔离;清空只作用于当前范围。前端复用唯一API客户端和全局弹窗管理器,支持真实NDJSON流、停止、重试和去重。 +- 阶段10门禁:Ruff通过,pytest为78项通过;Vue类型检查、2个文件6项Vitest和Vite生产构建通过;阶段4至10共10项Playwright通过,覆盖1920×1080、3840×2160、390×844、日夜模式和非会员同结构锁定态。 +- 阶段10视觉与验收证据位于`next/docs/evidence/stage-10/`。新增最长后端文件262行、页面容器230行、页面样式289行;新系统未导入旧`mentor_agent.py`或建立第二套流式、配额和弹窗实现。 +- 阶段11已完成:观势实现正式日线与盘中实时两种严格模式、六爻确定性公式、安全门和客观行业数据补录;观气实现确定性历法、固定权重、三层气机和个人合参;观心实现40秒呼吸、一次投掷只生成一爻及六爻成卦。 +- 问天三种历史按账号隔离;每日解运具有数据库唯一约束和并发复用,已完成结果不会重复调用LLM或扣减额度。原始出生资料不在问天响应中回显。 +- 三种智能解读复用阶段10唯一LLM网关、配额、流协议和弹窗;页面保留已经验收的星空、六爻、铜钱与循环加载动画,没有复制旧`heaven_agent.py`、`heaven_engine.py`或建立第二套解读实现。 +- 阶段11门禁:Ruff通过,pytest为89项通过;Vue类型检查、3个文件7项Vitest和Vite生产构建通过;阶段4至11共12项Playwright通过,覆盖1920×1080、390×844、日夜模式、加载弹窗和非会员同结构锁定态。 +- 阶段11视觉与验收证据位于`next/docs/evidence/stage-11/`。市场情绪计算从业务域收敛到数据层,问势实时组装从通用网关拆到专用数据模块;NAS生产容器保持不变。 +- 阶段12已完成:我的复盘交付账户独立的自选追踪、交易日志、每日复盘、历史记录和个股复盘笔记;重复加入自选不会清空既有备注。 +- 提醒中心支持手动提醒、策略T+1/T+5提醒、未读状态和持久化去重;复盘助手复用唯一LLM网关并只读取本地市场快照和当前账号私有记录,非会员保留同结构灰色锁定态。 +- 阶段12门禁:Ruff通过,pytest为92项通过;Vue类型检查、3个文件7项Vitest和Vite生产构建通过;阶段4至12共14项Playwright通过,覆盖1920×1080和390×844、日夜模式、全局弹窗与私有数据流程。 +- 阶段12视觉与验收证据位于`next/docs/evidence/stage-12/`。新增业务Service 368行、页面样式397行;未导入旧复盘、自选或助手实现,也未建立第二套弹窗、LLM、配额或流协议。 +- 阶段13已完成:移动端保留五个一级入口,市场复盘通过统一选择器访问12个子页;桌面和移动端共用唯一交易日期组件,复盘页补齐提醒中心与复盘助手入口。 +- 430px以下通用宽表重组为字段明确的纵向记录,平板和横屏保留局部横滚;底部导航正确识别所有市场子页,横屏股池工具栏收为一行。 +- 阶段13门禁:Ruff和92项pytest通过;Vue类型检查、3个文件7项Vitest和Vite生产构建通过;阶段4至13共17项Playwright通过。320、375、390、430、768、844×390横屏及1024至4K断点均无页面横向溢出,16个工作区在320px逐页可达。 +- 可访问性补齐跳到主内容、排序`aria-sort`、弹窗焦点回收、44px触控目标和有效的1ms减少动态效果令牌。移动规则集中在537行的唯一`mobile.css`,未复制页面、API或业务状态。 +- 阶段13视觉与验收证据位于`next/docs/evidence/stage-13/`。 +- 新系统进入阶段14:交付可重复的旧库迁移、Docker运行、备份恢复、升级回退及性能安全检查,所有演练仅作用于副本和新系统容器资产。 +- 阶段14已完成:一次性迁移工具以只读 URI 打开旧库,真实副本迁移保留3个账号、会员与模型配置、全部已归属私有记录、196次历史选股、16条跟踪及受控展示归档;完整性检查通过且外键违规为0。 +- 备份使用SQLite在线备份API并将数据库、环境密钥材料和私有Skill归入同一带SHA-256清单的归档;恢复默认拒绝覆盖并在落盘前校验安全路径、文件摘要和数据库完整性。真实恢复演练通过。 +- 生产前端改为FastAPI同端口提供,SPA深链接与API 404边界通过测试;新容器定义采用多阶段构建、非root、只读根文件系统、持久卷和健康检查。开发机没有Docker,实际镜像构建和容器重启恢复列为NAS切换前阻断验收项。 +- 阶段14门禁:Ruff、96项pytest、Vue类型检查、7项Vitest、Vite生产构建及17项Playwright全部通过;真实迁移库副本行情摘要读取P95为23.55ms。证据位于`next/docs/evidence/stage-14/`。 +- 新系统进入阶段15:执行规格覆盖矩阵、减法审计、性能安全总验收、人工维护演练和最终切换准备;阶段15不自动切换NAS生产容器。 +- 阶段15已完成:85个固定产品案例逐项映射到确定性/API或真实浏览器证据;重建运行时代码由旧版61,793行收敛为25,151行,减少约59.3%,未复制旧巨型文件和CSS覆盖层。 +- 结构审计消除LLM网关对账户具体类的反向依赖;数据库状态命令修复为真正只读且能识别已有migration。统一生产安全头、静态缓存边界、维护手册和NAS切换/回退清单已交付。 +- 阶段15门禁:Ruff、99项pytest、Vue类型检查、7项Vitest、Vite生产构建和17项Playwright全部通过;npm与Python生产依赖已知漏洞均为0,敏感值扫描通过。 +- 新系统代码迁移工作完成。正式NAS切换仍被Docker实构建、容器重启恢复和用户切换窗口确认三类人工条件阻断,不在本阶段自动执行。 +- 生产切换明确保留为最终人工确认项。 diff --git a/docs/product/小白复盘-完整产品规格说明书.md b/docs/product/小白复盘-完整产品规格说明书.md new file mode 100644 index 0000000..853f564 --- /dev/null +++ b/docs/product/小白复盘-完整产品规格说明书.md @@ -0,0 +1,2000 @@ +# 小白复盘完整产品规格说明书 + +> **2026-07-30保真迁移补充裁决:** 当前任务不再是依据本文“从零重建”,而是整理迁移原版源码。 +> 原版真实运行行为、源码、样式和资产是保真基线;本文只用于功能盘点和解释。本文与原版不一致时 +> 不得由实施者自行按本文重写,必须保持原状并交由用户裁决。完整约束见 +> [`../migration/原版保真迁移总纲.md`](../migration/原版保真迁移总纲.md)。 + +> 文档性质:产品事实与重建规格(Single Source of Product Truth) +> 适用场景:在不读取旧代码、不依赖历史对话的前提下,从零重建“小白复盘” +> 基准日期:2026-07-29 +> 文档版本:1.0 + +## 0. 文档效力与使用方法 + +### 0.1 重建目标 + +本说明书定义“小白复盘”所有必须被用户观察到的行为,包括功能、业务口径、权限、数据真相、交互状态、视觉层级、终端行为、异常处理、持久化边界和验收案例。技术栈、目录、类、函数、数据库品牌和部署工具均可更换,但不得改变本说明书中标为“已确认产品标准”的行为。 + +一个没有任何项目上下文的实现者,应能依照本文完成以下工作: + +1. 还原完整的信息架构、页面与交互。 +2. 还原全部角色权限和用户数据隔离边界。 +3. 还原行情日期、数据来源、缺失和降级规则。 +4. 还原情绪周期、集合竞价、智能选股和问天的确定性计算。 +5. 还原日间、夜间、1080P、4K和移动端的目标行为。 +6. 依据文末验收案例判断重建是否合格。 + +### 0.2 三类状态 + +本文只使用以下三类状态,实施者不得混淆: + +| 状态 | 含义 | 实施要求 | +|---|---|---| +| 已确认产品标准 | 产品最终应具有的行为 | 必须实现;优先级高于旧版本现状 | +| 当前实现基线 | 当前版本已经具备、重建时不得无意丢失的能力 | 应保留;与已确认标准冲突时以已确认标准为准 | +| 待设计或待升级 | 已识别但尚未定稿的能力 | 不得擅自补全为正式功能;应保留扩展位并明确显示不可用或不展示 | + +除明确标注外,本文正文均为“已确认产品标准”。 + +### 0.3 冲突裁决顺序 + +发生冲突时,按以下顺序裁决: + +1. 本文中的已确认产品标准。 +2. 本文中的固定验收案例。 +3. 本文中的当前实现基线。 +4. 视觉参考图和历史版本仅用于辅助比对,不得覆盖前三项。 +5. 旧代码中的偶然行为、补丁行为和已知缺陷不构成产品标准。 + +### 0.4 产品边界 + +小白复盘是面向A股盘前观察、盘后复盘、策略筛选和个人记录的工作台,不是券商交易终端。系统: + +- 不连接券商账户,不自动下单,不代用户执行交易。 +- 不承诺收益,不把统计相关性表述为因果关系。 +- 不使用模拟行情伪装真实数据。 +- 不允许LLM改变确定性计算结果。 +- 不向普通用户暴露数据供应商、模型名称、接口名称、Token、错误堆栈等工程信息。 +- 所有页面底部常驻“股市有风险,投资需谨慎”。 + +## 1. 产品信息架构 + +### 1.1 主工作区 + +侧栏按以下顺序提供16个主工作区,登录后默认进入“情绪周期”: + +| 序号 | 工作区 | 核心目的 | +|---:|---|---| +| 1 | 情绪周期 | 判断全市场情绪温度、方向和六阶段 | +| 2 | 涨停池 | 查看当日封板股票及封板结构 | +| 3 | 炸板池 | 查看触板未封股票及炸板原因 | +| 4 | 跌停板 | 查看跌停风险与风险聚集 | +| 5 | 昨日涨停 | 观察昨日涨停股的次日反馈 | +| 6 | 涨停表现 | 按昨日高度观察晋级、兑现和断板 | +| 7 | 市场天梯 | 查看当日连板梯队与市场高度 | +| 8 | 板块轮动 | 查看多日热点迁移与板块成分 | +| 9 | 集合竞价 | 查看题材承接、竞价异动和成交额变化 | +| 10 | 题材库 | 查看题材排行、基础行情与成分股 | +| 11 | 人气热榜 | 查看同花顺、东方财富及双榜共识 | +| 12 | 龙虎榜 | 查看上榜明细、活跃游资和游资档案 | +| 13 | 智能选股 | 阶段选股、策略选股、自定义选股 | +| 14 | 问师 | 使用蒸馏的思维模型进行复盘对话 | +| 15 | 问天 | 观势、观气、观心三项传统文化观察 | +| 16 | 我的复盘 | 自选、每日复盘、交易日志和个人历史 | + +### 1.2 内部页面与全局能力 + +“策略持续跟踪”是智能选股内部页面,不在侧栏显示;仅由智能选股页面的显著入口进入。 + +全局能力包括: + +- 登录、注册、退出、切换账号。 +- 顶部交易日期选择和页面刷新。 +- 全局搜索和`Ctrl+K`。 +- 日间/夜间模式。 +- 提醒中心。 +- 复盘助手。 +- 账户菜单。 +- 管理员后台刷新和系统管理。 +- 股票、板块、题材、指数行情悬浮预览与详情。 +- 统一弹窗、Toast、加载态、空态、错误态和底部状态栏。 + +## 2. 角色、身份与数据边界 + +### 2.1 身份模型 + +“管理员权限”和“会员状态”是两个独立维度,不是互斥角色: + +- 普通用户:已登录,但没有有效会员。 +- 会员:拥有有效会员订阅。 +- 管理员:拥有系统管理权限。 +- 管理员可以同时是会员;同时满足时,顶部必须同时显示“管理员”和“会员”两个标识。 +- 管理员即使没有会员订阅,也可访问智能功能进行管理和测试,但界面不得因此把其会员状态伪装为“已开通会员”。 + +### 2.2 权限矩阵 + +| 功能 | 普通用户 | 会员 | 管理员 | +|---|:---:|:---:|:---:| +| 共享行情、股池、情绪、板块、竞价、题材、热榜、龙虎榜 | 可用 | 可用 | 可用 | +| 搜索、行情悬浮、详情页 | 可用 | 可用 | 可用 | +| 自选、个股笔记、每日复盘、交易日志、提醒 | 可用 | 可用 | 可用 | +| 智能选股、问师、问天、复盘助手、策略跟踪 | 只展示锁定态 | 可用 | 可用 | +| 配置个人LLM | 不提供 | 不提供 | 不提供 | +| 后台刷新、系统管理 | 不显示 | 不显示 | 可用 | +| 行情凭据、历史回补、模型池、会员管理 | 不显示 | 不显示 | 可用 | +| 原因修订、席位归类、五行行业归类 | 不显示 | 不显示 | 可用 | + +普通用户进入会员功能时,不使用空白页或单独营销页。页面结构与会员一致,顶部显示“仅对会员开放”,下方内容灰化、不可操作,并提供进入“会员状态”的明确入口。 + +### 2.3 用户私有数据 + +以下数据必须带有明确账号所有权;任何读取、更新、删除和导出都必须验证当前账号,两个用户永远不能互相看到: + +- 自选股和自选备注。 +- 每日复盘。 +- 个股复盘笔记。 +- 交易日志。 +- 提醒。 +- 问师对话、置顶和自定义排序。 +- 问天历史与当天解运结果。 +- 自定义选股策略、个人手动执行结果。 +- 策略持续跟踪。 +- 复盘助手对话。 +- 出生日期、时辰、性别及其派生信息。 + +### 2.4 系统共享数据 + +以下数据为平台共享,不按用户重复保存: + +- 行情快照、交易日历、股票主表。 +- 情绪、股池、天梯、板块、竞价、题材、热榜、龙虎榜。 +- 系统内置策略和盘后自动候选池。 +- 平台模型池、系统数据凭据和刷新配置。 +- 管理员维护的事件原因、席位别名和行业归类。 + +## 3. 账户、会员与系统管理 + +### 3.1 注册与登录 + +- 账号名长度3至30位,可使用中文、字母、数字、下划线和连字符。 +- 密码长度8至128位,至少包含字母、数字、符号中的两类。 +- 首个成功注册的账号自动成为管理员。 +- 后续注册账号默认为普通用户。 +- 登录失败只显示安全的用户提示,不说明账号是否存在。 +- 修改密码必须输入当前密码、新密码和确认密码;成功后给出Toast反馈。 +- “切换账号”返回登录界面,但不能删除本账号数据。 + +### 3.2 顶部身份标识与账户菜单 + +- 有效会员显示设计感明确的金色V标识;非会员不显示会员标识或显示克制的“普通用户”状态,不能显示会员。 +- 管理员显示管理员标识;管理员兼会员时两个标识并存且不覆盖。 +- 点击会员/普通用户标识直接打开“会员状态”。 +- 点击账户设置后出现下拉菜单,依次为:个人资料、会员状态、修改密码、切换账号、退出。 +- 五项均为真实可点击操作,不得合并成一个长页面后失去独立入口。 + +### 3.3 个人资料 + +- 可录入出生日期、出生时间和性别。 +- 明确说明个人信息私密性:原始资料加密保存,仅当前账号可见。 +- 问天只读取排盘后的派生信息,不在问天页面回显原始出生日期、时辰和性别。 +- 用户可以删除出生资料;删除后个人合参显示未配置状态。 + +### 3.4 会员状态 + +会员状态页必须包含: + +- 会员说明和普通用户/会员功能对比。 +- 文案:“开通会员后可使用智能选股、问师、问天、复盘助手等智能功能。” +- 开通状态:未开通、有效、停用。 +- 会员到期时间和剩余时长。 +- 今日智能分析已用次数、每日上限、剩余次数。 +- 智能分析加油包入口;当前状态固定为“暂不可用”,不可购买。 + +默认会员每日LLM调用上限为50次,管理员可设置1至1000次。管理员调用不受会员日额度限制。额度当前按成功发起的一次业务调用计数,不按Token计费;未来如改为Token计费,必须另行升级本规格。 + +### 3.5 管理员会员管理 + +- 可按账号开通、续期和停用会员。 +- 时长选项固定为1个月、3个月、12个月、3年、永久。 +- 有效会员续期从现有到期时间继续累计。 +- 已过期账号续期从当前时间重新计算。 +- 永久会员不显示误导性的剩余天数。 +- 列表显示账号、会员状态、到期时间和每日智能分析上限。 + +### 3.6 系统管理 + +系统管理以分类选择切换内容,不把所有功能堆在一个页面: + +1. 行情管理:平台行情凭据、刷新状态、历史数据回补。 +2. 模型池:模型列表、添加/编辑/删除/测试、主模型和辅助模型选择。 +3. 会员管理:会员时长、到期时间、停用和每日LLM上限。 + +模型池规则: + +- 最多20个模型。 +- 每个模型包含显示名称、服务地址、模型标识和密钥。 +- 主模型必选;辅助模型可以关闭。 +- 主模型和辅助模型不能选择同一模型。 +- 每个模型可以独立测试连通性。 +- 密钥保存后不再返回浏览器,只显示已配置状态。 + +## 4. 全局页面骨架与交互 + +### 4.1 PC页面骨架 + +PC端统一采用以下固定骨架: + +- 侧栏宽度200px。 +- 顶栏高度46px。 +- 市场摘要条收起高度约36px。 +- 主内容区上内边距14px、左右内边距16px。 +- 同级模块间距12px。 +- 底部状态栏高度30px。 +- 页面切换时侧栏、顶栏、摘要条和状态栏不得发生位移。 +- 问天可拥有独立星空气质,但必须使用同一外壳、上边距和左右边距。 + +### 4.2 顶栏 + +顶栏包含: + +- 当前页面标题或品牌识别。 +- 交易日期选择。 +- 顶部搜索图标。 +- 提醒中心。 +- 日间/夜间切换。 +- 会员/普通用户身份标识。 +- 管理员标识。 +- 账户菜单。 +- 仅管理员显示“后台刷新”和“系统管理”。 + +图标应使用熟悉、克制的通用图形,不能使用过度花哨、难辨认的装饰图标。图标按钮必须有中文Tooltip和无障碍名称。 + +### 4.3 市场摘要条 + +摘要条显示:市场情绪、涨停、跌停、炸板、封板率、两市成交、数据日期时间。 + +- 市场情绪前的圆点在展开态具有常驻且克制的呼吸动效。 +- 收起态不显示会变形的情绪圆柱。 +- “市场情绪”和其后的“情绪偏弱/偏强”等状态文字字号、基线和字形一致,只通过颜色区分状态。 +- 展开内容使用清晰分组,不把工程字段暴露给用户。 +- 折叠与展开不能改变主内容横向位置。 + +### 4.4 底部状态栏 + +- “股市有风险,投资需谨慎”位于固定状态栏中。 +- 无论表格只有1行、筛选到3板+、展开更多或页面滚动,状态栏位置都不能随数据量上移。 +- 在全页滚动页面中,状态栏可以位于视口底部或页面壳底部,但必须保持一致,不能覆盖内容。 + +### 4.5 弹窗、Toast与加载 + +- 所有模态弹窗默认在视口中心,不能出现在左上角。 +- 同一时间只允许一个无关模态弹窗打开。 +- 支持Escape关闭、遮罩层关闭(危险操作确认除外)和键盘焦点回收。 +- 表单验证错误显示在对应字段附近,并可同时给出简短Toast。 +- “保存成功”“交易记录已保存”等反馈必须是内容自适应Toast,不能生成超长空弹窗。 +- 加载背景必须跟随日间/夜间主题,不能闪白。 +- 主题切换必须原子完成;表格和卡片不能晚一拍变色。 + +## 5. 日期、刷新与行情真相 + +### 5.1 默认日期 + +- 每次打开网站默认选择“最新可用交易日期”,不是沿用浏览器上次停留的过期日期。 +- 默认页面为情绪周期。 +- 选择历史日期后,所有以顶栏日期为准的页面显示该日期数据。 +- 悬浮日K是例外:永远显示最近真实行情,不严格跟随页面历史日期。 + +### 5.2 盘前、盘中、收盘和非交易日 + +| 场景 | 展示规则 | +|---|---| +| 交易日9:15前请求今天 | 显示最近有效交易日15:00收盘快照 | +| 交易日9:15至收盘前 | 显示最近一次真实刷新数据及其真实时间 | +| 交易日收盘后 | 使用当日最终数据,数据时间显示15:00 | +| 周末、节假日 | 显示最近有效交易日15:00收盘快照 | +| 选择历史日期 | 只显示该日期或该日期之前的真实归档,不混入当前实时数据 | +| 当前日期取数失败 | 可沿用最近真实收盘快照,但必须标明实际数据日期和“沿用最近快照” | +| 从未成功同步 | 明确提示等待管理员首次同步,不显示模拟数据 | + +不得把上一交易日数据标成今天,不得为了图形完整制造不存在的今日K线。 + +### 5.3 数据日期时间 + +- 历史日显示`YYYY-MM-DD 15:00`。 +- 今天尚未收盘显示最近一次真实刷新时间。 +- 今天收盘后显示`YYYY-MM-DD 15:00`。 +- 沿用旧快照时,显示旧快照真实日期时间。 +- 页面中的“数据日期”和数据本身必须来自同一快照。 + +### 5.4 刷新语义 + +- 普通“刷新”重新读取最新服务端快照,保持当前页面和合理的筛选状态。 +- 管理员“后台刷新”启动服务端数据同步,但不主动重绘当前用户页面。 +- 数据同步失败不能导致已存在的最后真实快照消失。 +- 后台实时刷新窗口为交易日9:15至11:35、12:55至15:05。 +- 实时快照约每8秒达到一次刷新条件;实际调用频率必须受供应商额度和限流约束。 +- 盘后自动智能选股在15:10之后、当日行情和因子确认完成后执行。 + +## 6. 数据来源、单位与质量标准 + +### 6.1 数据源职责 + +| 数据源 | 可用于正式计算 | 主要职责 | +|---|:---:|---| +| Tushare | 是 | 交易日历、股票主表、日线、估值、财务、资金流、申万行业、涨跌停、9:25竞价、热榜、龙虎榜 | +| iFinD | 是,限许可字段 | 实时快照、动态竞价、分时、图表和经批准的事件补充 | +| 东方财富公开数据 | 否 | 分时图等纯展示兜底 | +| 腾讯公开数据 | 否 | 实时指数观察的纯展示兜底 | +| 本地确定性派生 | 是 | 情绪、选股、问天等计算结果 | + +东方财富和腾讯的公开网页数据不得进入情绪、智能选股、回测或问天的确定性计算。若未来要升级为正式计算源,必须逐字段完成授权、单位、复权、新鲜度和一致性验收,不能整体替换。 + +### 6.2 数据质量元信息 + +每一个进入计算的观测值必须可追溯: + +- 数据实体和交易日期。 +- 真实观测时间。 +- 数据来源。 +- 单位和精度。 +- 复权方式。 +- 覆盖率和新鲜度。 +- 是否最终值、实时值或归档值。 + +计算数据缺失时采用“失败关闭”:不能用口径不同的代理值静默继续,并仍声称原算法已经完成。展示数据缺失时显示“暂不可用”及可理解原因,不生成模拟值。 + +### 6.3 关键覆盖率与新鲜度 + +| 数据集 | 最低覆盖率 | 新鲜度/特别要求 | +|---|---:|---| +| 交易日历 | 100% | 日期链必须连续可验证 | +| 股票主表 | 98% | 退市、上市状态明确 | +| 股票日线 | 98% | 正式计算使用同一复权口径 | +| 日度估值 | 95% | 单位转换一致 | +| 财务指标 | 90% | 必须按公告时间做时点对齐,防止未来函数 | +| 资金流 | 90% | 不得混用不同供应商口径 | +| 申万行业 | 95% | 必须明确申万层级与成分覆盖 | +| 涨跌停事件 | 100% | 触板、封板和连板口径一致 | +| 最终竞价 | 90% | 使用9:25最终竞价 | +| 动态竞价 | 80% | 快照新鲜度目标10秒 | +| 人气榜 | 95% | 标明榜单真实日期 | +| 龙虎榜 | 95% | 区分无上榜与席位无法归类 | +| 分时图 | 100%单标的序列 | 盘中新鲜度目标30秒 | +| 实时指数观察 | 三大指数100% | 新鲜度目标90秒 | + +### 6.4 单位与空值 + +- 价格:元/股。 +- 成交量:股。 +- 底层成交额:元;界面按亿或万统一换算。 +- 涨跌幅、换手率、财务比率:百分比。 +- 总市值和流通市值展示统一为亿元。 +- 日期使用`YYYY-MM-DD`,时间使用24小时制。 +- 金额大于等于1亿元显示`X.XX 亿`,否则显示`X.XX 万`。 +- 表格空值留空;空态说明原因。不得满屏使用`--`掩盖缺失。 +- 数值列右对齐并使用等宽数字;单位进入表头。 + +### 6.5 尚未接入的数据 + +以下能力当前标为“待设计或待升级”,不得伪装已完成: + +- 分析师一致预期、目标价和评级变化。 +- Level-2逐笔成交、逐笔委托、委托队列和未匹配订单。 +- 稳定、完整的政策、隔夜资讯、汇率、利率和商品宏观序列。 +- 隔夜消息面对竞价反应的正式量化。 + +## 7. 全局搜索、行情预览与详情 + +### 7.1 全局搜索 + +- 顶栏提供搜索图标,支持`Ctrl+K`打开。 +- 不提供用户自定义快捷键。 +- 若按键事件已被其他功能占用,提示“Ctrl+K已被其他功能占用,请点击顶部搜索按钮”。 +- 输入后约160毫秒防抖搜索。 +- 结果按股票、板块、题材、指数四组固定顺序展示。 +- 支持名称、代码和合理的模糊匹配。 +- 键盘上下方向键循环移动选择,Enter打开,Escape关闭。 +- 无输入、正在搜索、无结果、请求失败必须分别有明确状态。 +- 点击股票打开完整个股详情;点击板块、题材或指数打开对应实体详情。 + +### 7.2 行情悬浮预览 + +适用于股票代码、板块名称、题材名称和指数入口。 + +- 桌面端悬浮触发;默认优先显示最新日K,可切换分时。 +- 悬浮预览不严格跟随页面选择的历史日期,永远寻找最近真实行情。 +- 鼠标从触发元素移动到浮层时,浮层不能立即消失;离开两者后延迟关闭。 +- 移动端不能依赖Hover,点击进入底部预览或详情。 +- 开盘前不得生成今天的空K线;展示最后一个真实交易日。 +- 盘中只有开、高、低、现价、成交量和成交额均有效时,才可合并当日实时K线。 +- 分时取最近一个有真实数据的交易日;横轴固定9:30至15:00,未发生时段保留空白。 +- 分时以昨收为0轴,显示均价线。 +- 日K上涨红色空心,下跌绿色实心;上下影线不能穿过空心实体。 +- 加载态和错误态跟随主题,不能出现白色闪屏。 +- 图表显示真实数据日期,不向普通用户显示供应商名称。 + +### 7.3 个股详情 + +个股详情必须与原有完整详情功能一致,至少包含: + +- 股票名称、代码、价格、正确涨跌幅、行业、连板信息。 +- 日K/分时切换。 +- 资金流。 +- 涨停、炸板、跌停等事件逻辑或原因。 +- 现有交易数据。 +- 当前账号的个股复盘笔记,支持保存、更新和删除。 +- 添加/移除自选。 +- 进入“观势”的入口。 + +个股涨跌幅必须使用对应交易日的正确前收盘价计算,不得使用错误基准或把实时价格与历史前收混用。 + +### 7.4 板块、题材与指数详情 + +- 展示名称、代码或唯一标识、涨跌幅、现有交易指标、日K和分时。 +- 行情图默认日K,分时范围和0轴规则与个股一致。 +- 不显示个股事件逻辑。 +- 不显示个股复盘笔记。 +- 题材详情另外显示成分股列表。 + +## 8. 情绪周期 + +### 8.1 页面目标与结构 + +情绪周期用于说明市场整体处于什么温度、朝哪个方向变化、位于六阶段中的哪一阶段。页面采用全页滚动,保证1920×1080下交易日明细具有可用高度。 + +页面包含: + +1. 温度走势图:情绪温度、五日均线和阶段转折标记。 +2. 当前阶段:阶段、置信度、温度、较前日、升降温、封板率、涨停/炸板、昨日涨停反馈和样本数。 +3. 五维评分构成。 +4. 交易日明细:支持10日、20日、60日切换,默认20日。 + +已确认删除“判定口径”独立模块。当前阶段黄色警示只描述情绪,例如“情绪指标继续走弱”,不得夹带“提高选股门槛”“接受无候选”等选股建议。 + +### 8.2 情绪温度总公式 + +总温度由五项组成: + +| 维度 | 权重 | +|---|---:| +| 市场宽度 | 20% | +| 涨停生态 | 25% | +| 赚钱效应 | 30% | +| 连板结构 | 15% | +| 成交活跃度 | 10% | + +最终温度先计算五项加权和,再乘系统健康门控,并执行极端风险上限。分数四舍五入为0至100整数。 + +### 8.3 基础统计 + +- 市场宽度 = 上涨家数 ÷(上涨家数 + 下跌家数)×100。平盘家数不进入分母。 +- 封板率 = 涨停数 ÷(涨停数 + 炸板数)×100。 +- 昨日涨停红盘率 = 昨日涨停且今日涨幅>0的数量 ÷ 昨日涨停样本数 ×100。 +- 晋级率 = 昨日涨停且今日结果为晋级的数量 ÷ 昨日涨停样本数 ×100。 +- 重亏率 = 昨日涨停且今日涨幅≤-5%的数量 ÷ 昨日涨停样本数 ×100。 +- 梯队完整度 = 从首板到最高板之间实际存在的高度层级数 ÷ 最高板高度 ×100。 +- 近20日成交基线只使用此前有效交易日,不混入未来数据。 + +### 8.4 自适应评分 + +- 历史样本不足20个交易日:使用固定锚点线性评分。 +- 历史样本达到20日:自适应得分 = 固定锚点得分×25% + 最近最多250日历史百分位×75%。 +- 百分位采用“小于当前值的样本数 + 等于当前值样本数×0.5”除以样本数。 + +固定锚点: + +- 涨停强度:涨停10家映射0分,100家映射100分。 +- 跌停压力:跌停0家映射0分,50家映射100分,之后反向为跌停缓解分。 +- 封板质量:封板率35%映射0分,90%映射100分。 +- 最高板:1板映射0分,7板映射100分。 + +### 8.5 五维细项 + +涨停生态: + +- 涨停强度35%。 +- 封板质量35%。 +- 跌停缓解30%。 + +赚钱效应: + +- 昨日涨停红盘率30%。 +- 昨日涨停涨幅中位分25%,中位分 = 截断到0至100的`50 + 中位涨幅×7`。 +- 昨日涨停平均涨幅分10%,平均分 = 截断到0至100的`50 + 平均涨幅×6`。 +- 晋级率分20%,晋级率×2.5后截断到0至100。 +- 尾部安全15%。尾部安全 = 重亏安全×70% + 跌停安全×30%;重亏安全=`100-重亏率×3`,跌停安全=`100-昨日涨停中跌停占比×700`,均截断到0至100。 +- 昨日涨停样本为0时,赚钱效应暂记50分并明确标注缺少样本。 + +连板结构: + +- 最大高度分30%。 +- 晋级密度分25%,晋级密度 =(二板数 + 三板及以上数)÷ 涨停数;评分为密度×3后截断。 +- 三板以上分25%,结合三板以上密度固定分和历史百分位。 +- 梯队完整度20%。 + +成交活跃度: + +- 当日总成交额相对近20日均值70%;金额评分=`50 +(当日/均值-1)×100`后截断。 +- 涨停股成交额占市场成交额30%;占比×20后截断。 + +系统健康门控: + +- 系统健康度 = 市场宽度×60% + 跌停缓解×40%。 +- 健康度≥35时门控系数为1。 +- 健康度<35时,门控系数=`0.35 + 健康度/35×0.65`。 +- 市场宽度≤15且跌停≥100时,最终温度上限15。 +- 市场宽度≤25且跌停≥50时,最终温度上限24。 + +### 8.6 标签、方向与阶段 + +温度标签: + +- 80及以上:情绪高涨。 +- 60至79:情绪偏强。 +- 40至59:情绪中性。 +- 20至39:情绪偏弱。 +- 20以下:情绪冰点。 + +方向使用当前分数相对最近连续最多3个交易日均值的变化: + +- 大于3:升温。 +- 小于-3:降温。 +- 其余:持平。 + +六阶段为冰点、修复、发酵、高潮、分化、退潮。阶段必须经过状态机确认,不能把温度区间直接等同于阶段: + +- 冰点或退潮转修复:单日升温≥6、温度≥25、系统健康度≥24。 +- 修复转发酵:发酵原始信号连续两个交易日成立;单日偶发不能直接切换。 +- 高潮:温度≥80、赚钱效应≥60、系统健康度≥60、涨停生态≥70。 +- 高潮条件消失但未崩塌:转分化。 +- 发酵温度跌破45且继续转弱,或系统健康度明显下降:转退潮/分化。 +- 任何阶段触发极端冰点条件:转冰点。 +- 首个连续交易日可采用原始阶段信号,但必须标明样本不足。 + +### 8.7 明细表 + +交易日明细必须至少包含日期、温度、阶段、方向、红盘率、封板率、涨停、炸板、跌停、最高板、成交额和昨日涨停反馈。温度、阶段、方向和红盘率列的表头及单元格对齐方式一致;数值右对齐,阶段文本左对齐。 + +## 9. 市场股池与市场结构 + +### 9.1 通用表格规则 + +- 代码和股票名称分列,代码在名称左侧。 +- 第一列标题为“序号”,不显示`#`。 +- 主要数值列宽度按内容类型等宽;原因、逻辑、线索列可更宽。 +- 所有列合计占满可用宽度,不能前部拥挤、右侧大量空白。 +- 首封、最后封板、首次触板等时间列统一对齐。 +- 表头数值列可排序;支持代码/名称/板块搜索和CSV导出。 +- 表格日间、夜间均不得出现白边或主题延迟。 + +### 9.2 涨停池 + +- 筛选:全部、首板、2板、3板+。 +- 表格:序号、代码、股票、连板、涨幅、价格、板块、首封、最后封板、开板次数、换手率、成交额、封单额、涨停原因。 +- 右侧显示连板高度和热点板块。 +- 搜索和筛选后表格仍保持统一列宽。 + +### 9.3 炸板池 + +- 表格:序号、代码、股票、现价涨幅、距涨停、价格、板块、首次触板、开板次数、换手率、成交额、炸板原因。 +- “距涨停”使用当日正确涨停价格计算。 + +### 9.4 跌停池 + +- 表格:序号、代码、股票、跌幅、价格、板块、换手率、成交额、连续跌停天数、风险线索。 +- 页面显示风险行业聚集提示,但不得把聚集统计写成个股确定性结论。 + +### 9.5 昨日涨停 + +- 结果分类:晋级、红盘、断板、炸板、跌停。 +- 摘要筛选:全部、晋级、红盘、断板、炸板+跌停。 +- 红盘兑现率 = 昨日涨停中今日涨幅>0的数量 ÷ 昨日涨停总数。 +- 表格:序号、代码、股票、昨日高度、今日涨幅、今日结果、当前高度、板块、涨停逻辑。 + +### 9.6 涨停表现 + +- 按昨日连板高度显示今日晋级、红盘、断板、炸板和兑现情况。 +- 高度不限制为5板;超过5板时上方结构动态扩展或折行,不能挤出右侧“今日结论”。 +- 下方市场宽度显示上涨、平盘、下跌、红盘率及比例条。 +- 右侧根据真实统计生成当天结论。 + +### 9.7 市场天梯 + +- 按首板、2板、3板、4板、5板+形成梯队。 +- 支持按封板时间、开板次数排序。 +- 每层默认限制显示数量,提供“展开更多”和“收起”。 +- 股票单元格在同一栅格中等宽;不是每行只放一个单元格。 +- 展开内容超过视口时页面正常滚动。 +- 右侧显示市场高度、梯队完整度和昨日梯队到今日的结构提示。 + +### 9.8 板块轮动 + +- 展示最近9个交易日,每日Top12热点。 +- 支持由远到近、由近到远排序。 +- 点击板块后,同一板块在其他日期中高亮,便于观察连续性。 +- 强度色阶:90及以上高、70至89中、70以下低;使用纯色背景,不增加高亮阴影。 +- 下方显示所选板块在目标交易日的有效申万成分股,不再显示“当日轮动明细”。 +- 成分表:序号、代码、股票、涨跌幅、开盘、收盘、成交额、行情状态。 +- 页面采用全页滚动。 + +## 10. 集合竞价 + +### 10.1 产品定位 + +集合竞价中心的核心不是9:30后的静态涨跌分类,而是: + +1. 监控昨日热门强势题材今天的承接,以及今天是否出现新强势题材。 +2. 在昨日涨停、昨日炸板、热榜和自选范围内识别竞价异动;这是核心能力。 +3. 观察集合竞价市场总成交额及多日变化。 +4. 隔夜消息面的竞价反应;当前只保留能力定义,未接入稳定消息接口时不作为主模块。 + +### 10.2 生命周期 + +| 时间 | 状态 | 行为 | +|---|---|---| +| 9:15前 | 待开始 | 显示前一交易日归档,并明确不是今日竞价结果 | +| 9:15至9:25 | 观察中 | 有iFinD许可数据时展示动态快照 | +| 9:25至9:30 | 筛选确认 | 使用9:25最终竞价快照形成结果 | +| 9:30后 | 已归档 | 冻结当日竞价结果,用于复盘 | +| 历史日期 | 历史归档 | 只读取该日归档 | + +iFinD动态竞价不可用时,不能把Tushare最终竞价伪装成动态监控;可在9:25后使用最终竞价,或显示已归档数据。 + +### 10.3 候选基数 + +- 昨日涨停池。 +- 昨日炸板池。 +- 同花顺和东方财富热榜;只纳入热榜前20。单榜排名超过10、又非双榜共识且非已有市场核心时剔除。 +- 自选股单独列出,不与公共候选混为同一身份。 + +市场核心标签包括:人气前5、三板以上、市场最高板、题材核心、市场领涨。所有市场核心必须保留,不能因普通候选数量上限被删除。 + +### 10.4 预期中枢 + +基础中枢: + +- 无连板基准:0.5%。 +- 昨日首板:1.5%。 +- 昨日2板:3.0%。 +- 昨日3板:4.0%。 +- 昨日4板及以上:5.0%。 +- 双榜共识:加0.8个百分点。 +- 单榜前10:加0.7个百分点;其他榜位按名次递减。 +- 总预期中枢上限6.5%。 + +成交确认修正: + +- 竞价量比≥2:加0.6;≥1.2:加0.3;<0.6:减0.5。 +- 竞价换手率≥0.15%:加0.25;<0.03%:减0.25。 +- 竞价成交额≥2000万元:加0.3;≥500万元:加0.15;<100万元:减0.3。 + +实际竞价涨幅相对修正后预期中枢: + +- 高至少1.5个百分点:超预期。 +- 低至少1.5个百分点:低于预期。 +- 其余:符合预期。 + +### 10.5 关注分与重点异动 + +关注分满分100,由以下部分组成: + +- 身份:14至35分。 +- 预期偏差:最多30分。 +- 量比:最多10分。 +- 成交额:最多6分。 +- 换手:最多4分。 +- 题材:最多15分。 + +重点异动规则: + +- 所有市场核心直接保留。 +- 非核心关注分≥55且标签不是“符合预期”时保留。 +- “符合预期”中按关注分最多保留前20。 +- 非核心整体以30只为目标上限,市场核心不受该上限影响。 + +### 10.6 一字板和涨跌幅制度 + +- 竞价价格封于当日涨停价时,单独进入“竞价一字”。 +- 一字板不参加普通异动评分和排序。 +- 新规ST股票涨跌幅限制按10%,不是旧制度的5%。 +- 其他股票按交易所、板块和上市状态计算当日有效涨跌停价。 + +### 10.7 页面布局与核对 + +- 数据集顺序:重点异动、我的自选、全部候选、竞价一字。 +- 二级预期筛选:全部、超预期、符合预期、低于预期;只作为筛选标签,不显示会误导的全池数量。 +- “竞价覆盖、重点异动、竞价一字、竞价成交额”摘要集成到数据集标签同一行最右侧,右侧不留多余间距。 +- 支持搜索和CSV导出。 +- 右侧展示题材承接、今日新线索、近10日竞价成交额和5日均值。 +- 删除占空间的隔夜消息反馈主模块;仅在未来数据可用后重新设计入口。 +- 当日竞价成交额摘要与柱状图必须使用同一时间、同一股票范围、同一去重口径,禁止一个显示169.33亿而图形显示另一口径。 + +## 11. 题材库、人气热榜与龙虎榜 + +### 11.1 题材库 + +- 左侧题材排行,右侧为题材基础行情和成分股。 +- 左侧题材排行宽度小于右侧,为成分股留出主要空间。 +- 固定题材日K模块取消。 +- 悬浮左侧题材名称时,显示与个股悬浮窗同规格的日K/分时预览。 +- 前三名强化名次和热度层级,但不使用夸张装饰。 +- 支持按题材名称或代码搜索。 +- 题材基础指标至少包括:成分股数、有行情数、上涨数、下跌数、换手率。 +- 成分股表:序号、代码、股票、涨跌幅、收盘价、成交额。 +- 切换题材时,右侧加载骨架必须随日间/夜间主题变化,不能闪白。 +- 无题材行情和无成分数据是两个不同空态,必须分别说明。 + +### 11.2 人气热榜 + +- 三个来源视图:双榜综合、同花顺、东方财富。 +- 顶部摘要:同花顺热度Top3、东方财富热度Top3、双榜共识。 +- 三个摘要模块之间没有白色衬底、连接阴影或视觉缝隙;模块自身保留既定填充色。 +- 综合排序中,同花顺排名贡献权重0.5,东方财富排名贡献权重0.25,双榜共识优先。 +- 双榜缺一时仍显示单榜真实结果,但不得伪装为双榜共识。 +- 当日榜单尚未生成时可显示最近有效榜单,但必须标注实际榜单日期。 +- 支持按代码、名称和概念搜索。 + +### 11.3 龙虎榜每日明细 + +- 视图:每日明细、游资档案。 +- 每日摘要、全部/净买入/净卖出/待归类筛选、搜索。 +- 活跃游资模块固定在其区域,不跟随操作明细内部滚动。 +- 仅“当日操作明细”内部滚动;游资介绍文字应有可读字号。 +- 点击游资后显示该游资当日操作明细。 +- 表格最左侧依次为序号、代码、股票,之后为买卖方向、金额、净额、上榜原因等实际字段。 +- 管理员可把待归类营业部设置为游资别名;同名席位合并统计。 + +龙虎榜空态必须区分: + +1. 当日没有股票上榜。 +2. 当日有上榜股票,但接口席位明细缺失。 +3. 当日有席位数据,但没有可识别游资,全部处于待归类。 +4. 数据接口请求失败。 + +不能在“有72/76只股票上榜”时只显示“暂无龙虎榜数据”。应显示实际股票数、席位数据覆盖情况、待归类数量,并提供查看前一交易日和重新检查。 + +### 11.4 游资档案 + +- 名录以Tushare收录席位和管理员归类为基础。 +- 页面采用左侧名录、右侧详情结构。 +- 详情显示游资名称、简介、关联营业部、近期可用统计和数据覆盖说明。 +- 不使用超长弹出框。 +- 当前重要性低于每日龙虎榜,但入口和数据结构保留。 + +## 12. 智能选股 + +### 12.1 权限与模式隔离 + +智能选股是会员功能,分为三个互相独立的模式: + +1. 阶段选股。 +2. 策略选股。 +3. 自定义选股(原“量化选股”)。 + +三个模式的选择状态、加载状态和候选结果分别保存。刷新页面、切换模式、切换阶段或切换策略后,不能让一个模式的结果覆盖另外两个模式,也不能让结果同时出现在三个界面。 + +### 12.2 阶段选股 + +- 每个交易日15:10后,行情和因子定格后由后台自动执行。 +- 用户不手动“执行选股”,不手动“同步因子数据”。 +- 取消“更换策略”和“编辑/自定义阶段策略”。 +- 当前情绪阶段只影响阶段选股,不影响策略选股。 +- 六阶段各有一套策略:冰点抗跌先手、修复先锋、主线发酵跟随、高潮核心去后排、分化承接回流、退潮防守观察。 +- 竞价强势确认作为独立的竞价阶段策略。 +- 页面显示四步:阶段识别、策略匹配、执行选股、结果与回测。 +- 四步状态必须来自真实任务状态;未执行、执行中、失败、已完成分别显示,不能永远是对号。 +- 当前阶段卡与匹配策略卡紧凑排列;情绪温度信息只显示一次,不能重复两套文案。 +- 无结果且数据完整时显示“暂无符合条件个股”;数据缺失时列出缺失字段。 + +### 12.3 策略选股 + +- 盘后由后台对每套内置精选策略独立运行。 +- 任何精选策略都不受当前情绪阶段门控。 +- 适用阶段只作为说明和风险提示,不决定是否执行。 +- 每套策略均显示适用环境、失效风险、数据状态、准入条件、评分权重、频率和风险等级。 +- 数据不完整时显示具体缺少的数据;不能将缺数据伪装为“暂无信号”。 +- 数据完整但无股票通过时显示“暂无符合条件个股”。 + +页面结构: + +- 左侧策略库:搜索、流派筛选、列表/图标排列。 +- 左侧小卡只显示标题、流派、等级/风险和信号状态,避免策略越多卡片越大。 +- 右侧策略详情:完整说明、适用环境、失效风险、条件和权重。 +- 下方候选结果:明确标注策略来源、选股日期和数据状态。 +- 点击策略卡本身即切换高亮与详情,不要求再次点击“条件”。 +- 条件详情如用弹窗,必须在视口中心。 + +### 12.4 自定义选股 + +自定义选股由用户手动执行,包含: + +- 因子与权重。 +- 过滤条件。 +- 上市天数下限。 +- 输出数量。 +- 最低综合分。 +- 剔除ST/退市开关。 +- 自然语言转换为受控公式。 +- 直接编辑、保存和删除个人公式。 +- 滚动回测。 + +交互要求: + +- 因子使用清晰分组,权重可用滑块或数值输入控制。 +- 权重总和必须校验;不等于100%时禁止执行并说明。 +- 过滤条件模块保持紧凑,不能占据整页主要面积。 +- 成交额、站上20日线等输入控件按内容自适应宽度,后方允许留白。 +- 执行按钮使用正常命令宽度,不能横跨整页形成巨长按钮。 +- 候选表必须在标准桌面宽度显示完整核心列;次要列可进入详情或局部横滚。 + +### 12.5 统一筛选与评分 + +所有阶段策略、精选策略和自定义策略按以下顺序执行: + +1. 确定选股日期和可用因子快照。 +2. 执行股票范围:上市状态、上市天数、是否排除ST/退市。 +3. 检查本策略所有过滤字段和评分字段。任一必需字段缺失,该股票不得进入候选,并计入数据缺失统计。 +4. 所有过滤条件同时成立的股票进入评分池。 +5. 对每个评分字段在当前合格股票横截面内计算百分位。 +6. “高优”因子值越大百分位越高;“低优”因子值越小百分位越高。 +7. 综合分 = 各因子百分位×权重之和 ÷ 权重总和。 +8. 低于策略最低综合分的股票剔除。 +9. 按综合分降序取策略规定的最大数量。 +10. 输出逐股综合分、主要贡献、风险提示、策略来源和数据日期。 + +若有历史回测: + +- 至少20个有效历史样本才可显示相对稳定的历史估计。 +- 历史样本≥20时,历史估计 = 回测胜率×65% + 当次综合分×35%。 +- 样本不足时明确标注“小样本”,不能用精确百分数营造可靠性。 + +### 12.6 自动执行、缓存与确定性 + +- 相同策略、相同选股日期、相同因子版本和相同策略版本必须得到相同结果。 +- 页面刷新不能重新随机执行,也不能清空已归档结果。 +- 数据同步完成后,后台任务以幂等键防止同日重复写入。 +- 结果记录策略版本、因子快照版本、实际数据日期、完成时间、数据覆盖率和失败原因。 +- LLM不参与候选计算。LLM仅可把自然语言转换为受控公式;最终仍由确定性筛选器执行。 + +### 12.7 策略持续跟踪 + +- 仅跟踪用户从候选结果中手动加入的股票。 +- 运行选股或后台自动生成候选,均不能自动加入跟踪。 +- 跟踪数据按账号隔离。 +- 基准价格为用户加入时记录的候选入选价。 +- 跟踪T+1开盘、T+1收盘、T+3收盘、T+5收盘、区间最大涨幅和最大回撤。 +- 支持手动刷新和移除。 +- T+1已有反馈和T+5全部完成时可生成站内提醒;同一批次同类提醒只能生成一次。 + +## 13. 内置策略业务定义 + +### 13.1 解释规则 + +本节定义36套可执行策略的当前正式口径。字段名称是产品级标准字段,不是特定代码实现。符号含义: + +- `between [a,b]`:包含上下边界。 +- `==1`:条件成立。 +- 高优:字段越大得分越高。 +- 低优:字段越小得分越高。 +- 最低分使用0至1的小数表示。 +- 除表中说明外,所有策略均排除名称含ST或退市风险标记的股票。 + +### 13.2 六阶段与竞价策略 + +| 策略 | 适用阶段/频率 | 股票范围 | 全部准入条件 | 评分权重 | 最低分/上限 | +|---|---|---|---|---|---| +| 冰点抗跌先手 | 冰点;每日 | 上市≥120日 | 当日涨幅[-3,7]%;5日涨幅≥-5%;成交额≥1亿;10日波动率≤7 | 相对强度30%高优;板块强度25%高优;5日量比20%高优;10日波动15%低优;成交额10%高优 | 0.58/12 | +| 修复先锋 | 修复;每日 | 上市≥120日 | 当日涨幅[1,9.7]%;5日涨幅>0;站上20日线;5日量比≥1.05 | 板块强度28%;相对强度24%;5日量比18%;主力净流入16%;成交额14%,均高优 | 0.54/15 | +| 主线发酵跟随 | 发酵;每日 | 上市≥120日 | 当日涨幅[0,9.8]%;5日涨幅≥3%;站上20日线;成交额≥2亿 | 板块涨停数25%;板块强度24%;10日涨幅20%;成交额16%;大单净流入15%,均高优 | 0.55/15 | +| 高潮核心去后排 | 高潮;每日 | 上市≥120日 | 当日涨幅[-2,7]%;10日涨幅≥5%;站上20日线;成交额≥5亿 | 成交额28%;板块强度22%;相对强度20%;波动率15%低优;连板高度15%高优 | 0.62/10 | +| 分化承接回流 | 分化;每日 | 上市≥120日 | 当日涨幅[-3,7]%;5日涨幅>0;站上20日线;5日量比[0.7,3.5] | 相对强度28%;板块强度24%;主力净流入20%;波动率16%低优;成交额12%高优 | 0.57/12 | +| 退潮防守观察 | 退潮;每日 | 上市≥180日 | 当日涨幅[-2,4]%;5日涨幅≥-2%;站上20日线;10日波动率≤4.5;成交额≥2亿 | 波动率30%低优;相对强度25%;成交额20%;板块强度15%;主力净流入10%高优 | 0.68/8 | +| 竞价强势确认 | 修复/发酵/分化;9:25后 | 上市≥120日 | 竞价涨幅[1,7]%;竞价成交额≥300万;竞价量比≥0.8;日成交额≥1亿 | 竞价额26%;竞价量比22%;竞价涨幅18%;板块强度18%;相对强度16%,均高优 | 0.56/15 | + +### 13.3 精选策略一览 + +| # | 策略 | 流派 | 频率 | 上市天数 | 最低分/上限 | +|---:|---|---|---|---:|---| +| 1 | 连续分红质量 | 红利价值 | 月度 | 1095 | 0.52/20 | +| 2 | ROIC质量低波 | 质量价值 | 月度 | 730 | 0.54/20 | +| 3 | 低估值现金流白马 | 现金流价值 | 月度 | 730 | 0.53/20 | +| 4 | 高增长合理估值 | 成长质量 | 月度 | 365 | 0.55/20 | +| 5 | 行业宽度主线 | 行业轮动 | 每周 | 180 | 0.56/20 | +| 6 | 首板低开 | 短线竞价 | 每日9:25 | 250 | 0.50/12 | +| 7 | 小碎步临界突破 | 形态突破 | 每日 | 250 | 0.54/15 | +| 8 | 连板龙头 | 连板接力 | 每日 | 120 | 0.50/10 | +| 9 | 微盘三正 | 小盘质量 | 每周 | 365 | 0.52/20 | +| 10 | 首板高开弱转强 | 短线竞价 | 每日9:25 | 120 | 0.52/15 | +| 11 | 中期动量·强者恒强 | 动量反转 | 每周 | 180 | 0.50/25 | +| 12 | 强者回调 | 动量反转 | 每日 | 180 | 0.48/20 | +| 13 | 超跌反转 | 动量反转 | 每日 | 180 | 0.50/10 | +| 14 | 相对强度新高 | 动量反转 | 每周 | 250 | 0.52/20 | +| 15 | 均线多头排列 | 趋势追踪 | 每周 | 365 | 0.50/30 | +| 16 | 唐奇安通道突破 | 趋势追踪 | 每日 | 180 | 0.52/15 | +| 17 | 周线趋势·日线买点 | 趋势追踪 | 每周 | 365 | 0.52/20 | +| 18 | 空间板 | 连板接力 | 每日 | 120 | 0.45/5 | +| 19 | 龙头首阴 | 低吸反核 | 每日 | 120 | 0.48/5 | +| 20 | 断板反包 | 低吸反核 | 每日 | 120 | 0.46/5 | +| 21 | 核按钮反核 | 低吸反核 | 每日 | 120 | 0.48/5 | +| 22 | 景气-趋势-拥挤三维行业打分 | 行业轮动 | 双周 | 180 | 0.50/12 | +| 23 | 大小盘/成长价值风格切换(元策略) | 元策略 | 每周 | 250 | 0.52/20 | +| 24 | 业绩超预期漂移(SUE/PEAD) | 业绩事件 | 事件驱动 | 180 | 0.50/15 | +| 25 | 多因子综合打分(IC动态加权) | 多因子 | 每周 | 250 | 0.55/30 | +| 26 | 热度突增潜伏(另类数据) | 热度观察 | 每日 | 120 | 0.48/10 | +| 27 | 机构榜溢价 | 资金席位 | 每日 | 180 | 0.48/10 | +| 28 | 行业动量轮动 | 行业轮动 | 双周 | 180 | 0.48/12 | +| 29 | 主力资金行业流入 | 行业轮动 | 每周 | 180 | 0.48/15 | + +### 13.4 精选策略准入与评分 + +| 策略 | 全部准入条件 | 评分字段与权重 | +|---|---|---| +| 连续分红质量 | 持续分红年数≥4;股息率TTM≥2%;ROE≥6%;PB在0.1至4 | 股息率30%高优;ROE 24%高优;经营现金流质量18%高优;10日波动16%低优;总市值12%高优 | +| ROIC质量低波 | ROIC≥6%;毛利率≥15%;PE TTM在1至45;成交额≥1亿 | ROIC 28%高优;毛利率22%高优;PS TTM 18%低优;10日波动18%低优;总市值14%高优 | +| 低估值现金流白马 | PB在0.1至1.8;ROA≥3%;经营现金流质量>0;净利同比≥-15%;总市值≥100亿 | ROA 26%高优;现金流质量24%高优;PB 20%低优;总市值16%高优;波动率14%低优 | +| 高增长合理估值 | PE TTM在1至35;营收同比≥10%;净利同比≥15%;ROE≥5%;成交额≥1亿 | 净利增速27%;营收增速23%;ROE 20%高优;PE 16%低优;相对强度14%高优 | +| 行业宽度主线 | 行业站上20日线宽度≥55;板块强度≥55;个股站上20日线;成交额≥2亿 | 行业宽度28%;板块强度24%;相对强度20%;板块涨停数16%;成交额12%,均高优 | +| 首板低开 | 昨日首板;竞价涨幅[-4.5,-2.5]%;60日位置≤0.55;昨日成交额≥1亿 | 竞价额28%高优;昨日成交额24%高优;60日位置20%低优;板块强度16%高优;竞价量比12%高优 | +| 小碎步临界突破 | 近30日无涨停;近80日的较早区间曾涨停;15日最大绝对涨跌≤3%;收盘/15日高点≥0.98;收盘/60日高点≥0.90 | 距15日高点26%高优;5日量比22%高优;相对强度20%高优;15日最大波动18%低优;流通市值14%低优 | +| 连板龙头 | 昨日连板高度≥2;昨日成交额≥1亿 | 昨日连板34%;板块涨停数24%;昨日成交额18%;换手率14%;板块强度10%,均高优 | +| 微盘三正 | PB>0;ROE>0;经营现金流质量>0;流通市值5至100亿;成交额≥0.5亿 | 流通市值32%低优;ROE 24%高优;现金流质量20%高优;换手14%高优;相对强度10%高优 | +| 首板高开弱转强 | 昨日涨停或触板;竞价涨幅[1,6]%;竞价量比≥0.8;昨日成交额3至25亿 | 竞价额28%;竞价量比24%;竞价涨幅18%;板块强度17%;相对强度13%,均高优 | +| 中期动量·强者恒强 | 价格3至100元;中期动量排名前10%;当日不是涨停 | 中期动量55%;相对强度25%;成交额20%,均高优 | +| 强者回调 | 中期动量排名前30%;5日涨幅排名后20%;站上20日线;RSI(6)≤30;近20日无跌停 | 中期动量42%高优;5日涨幅33%低优;成交额25%高优 | +| 超跌反转 | 5日涨幅排名后5%;5日累计换手≥30%;60日涨幅≥-40%;无财务风险;当日非跌停 | 5日涨幅45%低优;5日换手30%高优;成交额25%高优 | +| 相对强度新高 | 成交额≥1亿;相对沪深300的RS线创120日新高;60日超额收益≥10%;60日线斜率>0 | 60日超额收益50%;60日线斜率25%;成交额25%,均高优 | +| 均线多头排列 | MA5>MA10>MA20>MA60;20日线5日斜率>0;距250日高点回撤≤20% | 20日线斜率38%高优;高点回撤32%低优;相对强度30%高优 | +| 唐奇安通道突破 | 收盘突破此前20日高点≥2%;5日量比≥1.8;此前20日振幅≤35% | 量比40%高优;突破幅度35%高优;振幅25%低优 | +| 周线趋势·日线买点 | 周线MACD DIF和DEA均>0;日线金叉或回踩20日线收阳;本周成交额≥此前4周均值 | 20日线斜率35%;相对强度35%;成交额30%,均高优 | +| 空间板 | 当日为市场最高板;相对前一日为新晋空间板;所属板块涨停≥3 | 连板高度50%;板块涨停数30%;成交额20%,均高优 | +| 龙头首阴 | 近10日最高连板≥3;当日为断板后的首次阴线;跌幅≥-7%;成交量/前日≤0.8 | 历史连板45%高优;量比前日30%低优;板块强度25%高优 | +| 断板反包 | 已识别断板反包;断板后1至3日;收复断板日高点;成交量/断板日≥1 | 断板后天数35%低优;相对断板日量能35%高优;板块强度30%高优 | +| 核按钮反核 | 近5日至少涨停1次;盘中最大跌幅≤-7%;收盘涨幅≥-3%;下影/实体≥2;成交量/前日≤1.1 | 下影实体比42%高优;盘中最低涨幅30%低优;板块强度28%高优 | +| 景气-趋势-拥挤三维行业打分 | 行业综合分≥0.58;行业拥挤排名≤0.90;行业内个股动量排名≥0.50;成交额≥1亿 | 行业综合分55%高优;行业内动量25%高优;拥挤排名20%低优 | +| 大小盘/成长价值风格切换 | 当前风格匹配度≥0.65;成交额≥1亿 | 风格匹配度70%;相对强度30%,均高优 | +| 业绩超预期漂移 | 超预期幅度≥10%;营收同比>0;业绩事件质量通过;公告后1至5个交易日 | 超预期幅度60%;相对强度25%;成交额15%,均高优 | +| 多因子综合打分 | 动态多因子综合分≥0.65;无财务风险;成交额≥1亿 | 多因子分75%;相对强度15%;成交额10%,均高优 | +| 热度突增潜伏 | 人气综合分≥15;10日涨幅≤5%;近5日无涨停;成交额≥0.5亿 | 人气分50%;排名跃升25%;双榜共识10%;成交额15%,均高优 | +| 机构榜溢价 | 机构净买入≥3000万元;机构席位≥1;60日涨幅≤30%;昨日连板≤2 | 机构净买入55%;席位数15%;60日位置20%低优;成交额10%高优 | +| 行业动量轮动 | 行业20日动量排名前10%;行业内个股动量前20%;成交额≥1亿 | 行业20日涨幅38%;个股20日涨幅32%;总市值18%;成交额12%,均高优 | +| 主力资金行业流入 | 行业资金流排名前15%;行业5日净流入>0;行业5日涨幅≤8%;个股5日净流入/流通市值>0;成交额≥1亿 | 资金流占流通市值42%高优;行业5日净流入30%高优;行业5日涨幅16%低优;成交额12%高优 | + +### 13.5 适用环境与失效风险 + +每个精选策略详情必须展示以下语义,不得只显示“适用某阶段”: + +| 策略族 | 适用环境 | 主要失效风险 | +|---|---|---| +| 红利、质量、现金流价值 | 防守市、低利率、估值修复、重视回撤的环境 | 风险偏好快速上升时弹性落后;低估值可能是价值陷阱 | +| 成长质量 | 业绩驱动、成长占优且趋势确认 | 增长预期下修或估值收缩 | +| 行业宽度/动量/资金流 | 主线清晰、行业趋势可持续、资金先于价格 | 快速轮动、资金流口径噪声、财务披露滞后 | +| 竞价与连板 | 情绪修复、主线发酵、承接明确 | 退潮、高位补跌、竞价强势转盘中兑现 | +| 趋势与突破 | 趋势延续、整理末端、放量突破 | 无趋势震荡、假突破、均线滞后 | +| 低吸反核 | 核心辨识度仍在、恐慌释放后出现承接 | 题材退潮、深水拉回仅为日内脉冲 | +| 风格切换 | 大小盘或成长价值风格持续分化 | 风格快速往返导致20日信号滞后 | +| 业绩事件 | 披露窗口、上修且价格未充分兑现 | 披露口径不同、公告后高开兑现 | +| 人气与机构席位 | 热度早期扩散、低位机构净买入 | 讨论噪声、高位兑现、席位净买不等于锁仓 | +| 多因子 | 多个因子表现具有延续性 | 单一极端主题和风格突变导致历史有效性失效 | + +每套策略的具体文案基线: + +| 策略 | 适用环境 | 失效风险 | +|---|---|---| +| 连续分红质量 | 防守市、低利率环境与中长期配置窗口 | 风险偏好快速上升时,稳健资产的价格弹性通常落后 | +| ROIC质量低波 | 震荡偏弱、重视盈利质量与回撤控制的市场 | 主题快速扩散或高弹性行情中,低波筛选可能错过进攻方向 | +| 低估值现金流白马 | 估值修复、价值回归及防守配置阶段 | 低估值可能来自基本面持续走弱,需警惕价值陷阱 | +| 高增长合理估值 | 业绩驱动、成长风格占优且趋势获得确认的阶段 | 增长预期下修或估值快速收缩时,回撤可能明显放大 | +| 行业宽度主线 | 主线清晰、行业内部多数个股同步走强的行情 | 板块快速轮动时,宽度信号容易在确认后迅速衰减 | +| 首板低开 | 情绪修复期的分歧转一致与首板次日承接 | 退潮加速或低开缺少量能承接时,弱势可能继续扩大 | +| 小碎步临界突破 | 趋势蓄势、波动收敛后临近突破的结构市 | 无量突破或指数剧烈震荡时,容易形成冲高回落 | +| 连板龙头 | 高度拓展、题材梯队完整且接力情绪活跃的阶段 | 亏钱效应扩散或高位股集中退潮时,接力风险很高 | +| 微盘三正 | 小盘风格活跃、流动性宽松且风险偏好较高的行情 | 风格切向大盘或微盘流动性收缩时,组合波动会显著上升 | +| 首板高开弱转强 | 竞价承接明确、短线情绪修复或主线发酵阶段 | 高开缺乏板块共振时,竞价强势可能转为盘中兑现 | +| 中期动量·强者恒强 | 趋势延续、主升段及强弱分化清晰的行情 | 无趋势震荡或快速轮动中,动量信号容易反复失效 | +| 强者回调 | 主升趋势未破、强势股完成良性回踩的窗口 | 趋势已反转时,回调信号可能演变为下跌中继 | +| 超跌反转 | 急跌后恐慌释放充分、市场进入修复预期的阶段 | 单边下跌初段容易过早介入,超跌不等于止跌 | +| 相对强度新高 | 指数偏弱但结构性主线明确,或机构抱团强化的行情 | 基准快速补涨或强势方向瓦解时,相对优势可能迅速消失 | +| 均线多头排列 | 中期趋势向上、回撤有序的趋势市与主升段 | 高位趋势末端或宽幅震荡中,均线信号通常反应滞后 | +| 唐奇安通道突破 | 整理末端、放量突破并启动新趋势的行情 | 无量突破和宽幅震荡环境中,假突破出现概率较高 | +| 周线趋势·日线买点 | 中期趋势稳定、日线回踩或再启动的多周期共振阶段 | 周线拐点尚未确认时,日线信号可能只是短暂反抽 | +| 空间板 | 市场高度持续拓展、板块梯队完整的强接力环境 | 高度压缩或亏钱效应扩散时,最高板的补跌风险极高 | +| 龙头首阴 | 主线龙头仍有辨识度、首次分歧后存在回流预期的阶段 | 题材退潮或龙头地位被替代后,首阴可能只是下跌起点 | +| 断板反包 | 强势题材分歧后快速修复、核心股重新获得资金承接时 | 板块强度不足或反包缩量时,形态持续性通常较弱 | +| 核按钮反核 | 恐慌释放后出现明确承接、短线情绪转暖的窗口 | 系统性退潮中深水拉回可能只是日内脉冲,隔日风险较高 | +| 景气-趋势-拥挤三维行业打分 | 行业景气与价格趋势同向、但交易拥挤尚未达到极端的结构市 | 财务披露存在滞后,行业快速反转时三维综合分可能反应偏慢 | +| 大小盘/成长价值风格切换(元策略) | 大小盘或成长价值风格形成持续相对强弱的阶段 | 风格快速往返切换时,近20日相对表现容易产生滞后信号 | +| 业绩超预期漂移(SUE/PEAD) | 业绩披露窗口中,快报相对预告继续上修且价格尚未充分兑现时 | 预告与快报口径可能不同,公告后高开兑现会削弱漂移效应 | +| 多因子综合打分(IC动态加权) | 因子表现具备一定延续性、市场并非由单一极端主题主导时 | 近期有效因子可能快速失效,动态权重不能消除风格突变风险 | +| 热度突增潜伏(另类数据) | 人气快速抬升但股价尚未明显启动的题材萌芽与扩散初期 | 榜单热度可能由短期讨论驱动,缺少价格确认时误报率较高 | +| 机构榜溢价 | 机构专用席位在相对低位形成明确净买入、且成交承载正常时 | 高位机构榜可能对应兑现或对倒,席位净买入不等于持续锁仓 | +| 行业动量轮动 | 主线相对清晰、行业趋势能够延续两周以上的结构市 | 行业轮动速度过快或前三名差距很小时,动量优势容易迅速衰减 | +| 主力资金行业流入 | 板块轮动初期、资金先于价格形成连续净流入的阶段 | 资金流口径可能受大宗交易和短期对倒影响,单日突增不代表趋势 | + +### 13.6 多因子策略的当前标准与升级目标 + +当前实现基线: + +- 五类因子:价值、成长、质量、动量、交易情绪。 +- 各类内部先转横截面百分位,再取可用因子的均值。 +- 价值:PE低优、PB低优、股息率高优。 +- 成长:营收同比、净利同比高优。 +- 质量:ROE、ROIC、毛利率高优。 +- 动量:中期动量、相对强度高优。 +- 情绪:换手率、5日量比高优。 +- 当前动态权重以同一截面的20日收益排名相关性作为参考,负相关和过低权重被下限0.05截断,再归一化。 + +待设计或待升级,尚不能宣称已实现: + +- 行业内去极值。 +- z-score标准化。 +- 行业和市值中性化。 +- 使用过去12个月每个因子与下一期收益的Rank IC均值定权。 +- 每季度重算权重。 +- 输出全市场综合得分前5%。 + +在上述升级通过独立回测、未来函数审查和人工验收之前,界面不应把策略命名包装成“完整IC动态加权”。可显示“动态多因子(基础版)”并在详情说明当前口径。 + +## 14. 问师 + +### 14.1 页面与权限 + +- 问师为会员功能。 +- 左侧为思维模型库,右侧为流式对话。 +- 模型筛选:全部、A级、B级、C级;支持搜索姓名、模式或标签。 +- 等级只表示蒸馏素材证据和结构质量,不代表人物能力、收益率或推荐等级。 +- 前端只显示A/B/C,不显示普通用户无法理解的`6/6`、`5/6`等工程评分。 +- 支持置顶、自定义排序、拖拽和上下箭头微调。 +- 底部输入区紧凑,长回答行距适中,段落之间不得出现过大空白。 + +### 14.2 思维模型注册和私密性 + +- 一个公开思维模型由独立Skill资料、显示元数据和证据等级组成。 +- 有效Skill被放入公共模型库后自动出现在前端,不应要求每增加一个模型就修改页面代码。 +- 公共模型所有用户可见。 +- “小白”是管理员根据个人复盘蒸馏的私有模型,只保存在私有存储,不进入Git、镜像或公开目录,只对管理员可见。 +- 私有ID与公开ID冲突时只显示一份,优先私有版本。 +- 张德涛(无为校长)归类为趋势/资金流派,水皮归类为宏观大局观,不归类为游资;两者证据等级为A级。 + +### 14.3 对话隔离与流式规则 + +- 对话按账号、思维模型、交易日期三者隔离保存。 +- 清空只清当前账号、当前模型、当前日期的对话。 +- 每次调用最多带入最近10条历史消息,并设置总字符上限,避免无限增长。 +- 支持快捷问题、停止生成和失败后重试。 +- 回答必须是真流式:每个文本片段只追加一次;流结束后不能再次追加完整答案,避免双份结果。 +- 主模型在尚未输出任何内容前失败时可切换辅助模型。 +- 一旦已经向用户输出文本,中途失败只能提示连接中断,不能切换模型后重复整个回答。 +- 回答必须声明这是基于公开资料蒸馏的思维模型,不是真人本人,不构成投资建议。 + +### 14.4 按模型类型提供数据 + +所有模型不再共用完全相同的市场上下文。系统根据Skill的关注点选择数据: + +| 模型类型 | 默认上下文 | +|---|---| +| 情绪流 | 情绪温度、阶段、涨跌停、昨日反馈、天梯、板块轮动 | +| 首板流 | 首板环境、封板率、炸板、热点板块 | +| 龙头流 | 连板梯队、多板龙头、热点、轮动、人气榜核心 | +| 趋势流 | 宽基指数动量、资金面、板块轮动、市场宽度 | +| 低吸流 | 昨日涨停反馈、炸板、热点与承接 | +| 宏观流 | 上证、深证、创业板、上证50、沪深300、中证500、中证1000、中证2000及核心ETF | + +附加规则: + +- 问题涉及龙虎榜、机构、游资或席位时,追加相关龙虎榜数据。 +- 问题中识别到股票代码或名称时,最多追加2个标的的详情、资金流和近20日日K。 +- 当前没有稳定政策、隔夜资讯、汇率、利率和商品宏观序列时,必须明确数据缺失,不得编造。 +- Skill中的历史案例只能作为方法论,不能当作当前行情。 + +## 15. 问天 + +### 15.1 共用规则 + +问天为会员功能,包含观势、观气、观心: + +- 保留星空背景、过场、载入、起卦和智能解读加载动画。 +- 页面外壳遵循全站200px侧栏、46px顶栏和内容边距;内容区允许独立星空气质。 +- 日间使用与全站一致的宣纸浅色基底;夜间与全站夜色一致并增加克制星空。 +- 1080P下必须可完整滚动,不能隐藏页面滚动条导致下方不可达。 +- 历史记录按账号隔离。 +- 智能解读使用居中模态弹窗,包含“本次解读”和“历史记录”。 +- 解读加载动画循环直到结果出现;动画、标题和底部文字不得重叠。 +- 观势/解卦使用六爻推演动画;观气使用五运六气主题动画。 +- LLM只解释程序已经算出的结构,不能起卦、改卦、修改干支、行情或五运六气。 +- 所有结果明确属于传统文化和娱乐化观察,不构成预测或投资建议。 + +### 15.2 观势输入与状态 + +- 未输入时只显示“请输入股票代码或股票名称”。 +- 未输入时不显示“暂不成卦”、缺失原因或六爻校验。 +- 输入代码或名称后点击载入,解析唯一股票;重名时让用户选择。 +- 当前标的不使用背景框,左对齐显示“当前标的:股票名称 申万二级·行业名称”;名称和行业加粗并使用更明显颜色。 +- 只有输入标的但数据不足时才显示“暂不成卦”和详细原因。 + +### 15.3 观势三才六爻 + +六爻自下而上: + +| 爻位 | 含义 | 数据层 | +|---|---|---| +| 初爻 | 个股内核 | 个股成交活跃与承接 | +| 二爻 | 个股外显 | 个股涨跌、连板和事件状态 | +| 三爻 | 行业内核 | 申万二级行业成分宽度与换手/等权表现 | +| 四爻 | 行业外显 | 申万二级行业涨跌及领涨股 | +| 五爻 | 市场内核 | 情绪、封板率、成交、宽度、涨跌停平衡 | +| 上爻 | 指数外显 | 上证、深证、创业板平均涨跌 | + +所有标准化分值截断到[-1,1]。分值转爻: + +- 分值≥0.72:老阳,数9,动爻。 +- 0≤分值<0.72:少阳,数7。 +- 分值≤-0.72:老阴,数6,动爻。 +- -0.72<分值<0:少阴,数8。 + +势值 = 六爻标准化分值平均值×100。显示本卦图形、箭头、之卦图形、势值和三才状态;本卦后不得出现多余圆圈。 + +### 15.4 观势六爻公式 + +初爻,个股内核: + +- 盘中且活跃度数据有效:`35%×成交额全市场分位的[-1,1]映射 + 35%×相对市场换手 + 30%×同进度量能`。 +- 相对市场换手 = 截断`(个股换手/市场换手 - 1)/1.5`。 +- 同进度量能 = 截断`(当前量能/历史同进度量能 - 1)/1.5`。 +- 收盘/历史:先计算`32%×成交额分位 + 22%×换手率/20 + 25%×封单额/1.5亿 + 21%×(1-开板次数/6)`,各项截断到[0,1],再映射为`原值×2-1`。 + +二爻,个股外显: + +- `70%×(涨跌幅/10) + 20%×(连板高度/5) + 状态修正`,截断到[-1,1]。 +- 状态修正:跌停-0.70,炸板-0.25,其他+0.15。 + +三爻,行业内核: + +- 盘中:行业宽度60% + 相对市场换手40%。 +- 行业宽度 =(上涨成分数-下跌成分数)÷(上涨+下跌)。 +- 相对市场换手分 = 截断`(行业换手/市场换手-1)/1.5`。 +- 收盘/历史:行业宽度60% + 成分股等权涨跌标准化35% + 领涨股涨跌标准化5%。 +- 成分股等权涨跌和行业涨跌均按5%映射到[-1,1];领涨股按10%映射。 + +四爻,行业外显: + +- `90%×申万二级行业涨跌/5 + 10%×领涨股涨跌/10`,截断到[-1,1]。 + +五爻,市场内核: + +- 情绪标准化 = 情绪温度/100×2-1。 +- 封板标准化 = 封板率/100×2-1。 +- 成交变化 = 截断`(当日成交额/近期平均成交额-1)×3`。 +- 市场宽度分 = 截断`(上涨占比-0.5)×2`。 +- 涨跌停平衡 =(涨停数-跌停数)÷(涨停数+跌停数)。 +- 五爻 = 情绪35% + 封板20% + 成交变化20% + 市场宽度15% + 涨跌停平衡10%。 + +上爻,指数外显: + +- 三大指数数据完整时:上证指数、深证成指、创业板指涨跌幅的算术平均,按3%映射到[-1,1]。 +- 三大指数不完整时不得静默用市场宽度替代并仍声称指数外显已通过;应触发安全门失败。历史版本的替代公式只作为故障诊断,不是正式标准。 + +### 15.5 观势安全门和手动补录 + +只有六爻全部通过安全门才成卦。成卦下方可展开“六爻数据校验”,每爻显示:绿色通过、红色缺失/失败、用户补录。 + +安全门: + +- 个股交易日期必须匹配目标日期。 +- 盘中个股必须是真实实时快照;收盘和历史必须是正式日线。 +- 行业必须是申万二级,行业日期必须匹配。 +- 盘中行业需要申万实时行业涨跌、成分覆盖、相对市场换手。 +- 历史行业不得混入实时数据。 +- 收盘实时行业必须是15:00最终快照。 +- 小样本行业不能机械要求固定数量。成员少但全体有有效行情时允许通过;覆盖率必须达到安全阈值并显示实际`有效数/成员数`。 +- 指数必须有上证、深证、创业板三条,日期一致且完整。 +- 历史指数必须使用正式日线。 + +手动补录规则: + +- 用户补录客观量化数据,不允许直接选择阴/阳或爻数。 +- 可补录字段包括行业名称、行业涨跌、上涨/下跌成分数、成员总数、成分覆盖率、行业等权涨跌、相对换手、领涨股及涨跌,以及失败爻所需的其他客观值。 +- 补录只替换失败字段;通过的数据不被覆盖。 +- 补录后仍使用同一公式、安全范围和安全门重新计算。 +- 结果明确标记“用户补录”,支持“恢复自动数据”。 + +### 15.6 观气 + +载入时显示基础信息: + +- 观测日期、农历、干支、节气。 +- 当日复合断语,使用“湿热交蒸·燥中夹滞”这类复合气候表达,不能只写“土气偏显”。 +- 三层气机。 +- 个人合参;不显示原始出生信息,且模块可无背景以保持轻量。 +- 五行对应行业位于基础模块下方,等宽、默认折叠;折叠时页面无需滚动,展开后允许全页滚动。 + +确定性权重基线: + +- 中运30。 +- 司天/在泉:岁半前15/5,岁半后5/15。 +- 主气20。 +- 客气25。 +- 日干2.5。 +- 日支2.5。 + +主页面不展示权重条。五行对应行业是传统取象,不是行情旁证;显示字体必须可读。 + +解运结果包含:三层气机、复合断语、情绪与判断偏差、操作惯性、个人影响、今日生克断语和制衡动作。同一账号同一天成功解运一次后保存;再次点击直接显示“已解运”和已保存结果,不重复调用LLM。旧版被截断的结果只允许重新生成一次。 + +### 15.7 观心 + +观心有五阶段:静心、呼吸、起卦、察念、解卦。 + +- 用户不输入问题,只在心中默念。 +- 呼吸开始前准备1秒。 +- 每息:吸3秒、顿2秒、呼4秒,共9秒;5轮,总45秒。 +- 呼吸阶段只显示“吸”“顿”“呼”,不显示轮数或倒计时。 +- 呼气时光圈向内收;吸气向外扩;保留波纹沉浸动效。 +- 保留一炷香进度和真实随时间变化的动效。 +- “静心完成,开始起卦”按钮位于阶段内容下方,不与动效重叠。 + +起卦: + +- 三枚铜钱具有有设计感的字面和背面,不使用单一贴图或黑色瑕疵圆点。 +- 支持按住摇爻或明确的投掷操作。 +- 每次投掷只产生一爻,自初爻到上爻依次累积,共六次。 +- 未投掷的爻只显示“初爻/二爻…上爻”和“未得”,不得预先画出阴爻。 +- 第一次投掷时绝不能把六爻全部生成。 +- 六次完成后显示本卦、之卦和卦辞;不再显示六个单独爻解释卡。 +- 用户先记录或确认“第一念”,之后才允许解卦。 +- 支持返回、重新观心、历史记录和静音。 +- 夜间模式中提示文字、历史记录、静音和重新观心必须具有足够对比度。 +- 用户启用减少动态效果时,提供静态进度和文本反馈,但完整流程仍可完成。 + +## 16. 我的复盘、提醒与复盘助手 + +### 16.1 自选追踪 + +- 支持输入股票代码或名称搜索并添加。 +- 每账号独立。 +- 显示:标记、代码、股票、板块、今日涨幅、5日涨幅、竞价关注分、跟踪备注、操作。 +- 支持编辑备注、移除、从个股详情加入/移除。 +- 无行情的字段留空,不用错误的0代替。 +- 表格列宽按内容分配,股票、代码和操作不能挤压数值列。 + +### 16.2 每日复盘 + +- 日期默认跟随顶栏,也可在模块中选择。 +- 三个独立输入框:今日盘面一句话;今日做对了什么/做错了什么;明日策略。 +- 三个输入框不能合并成一个文本区。 +- 同日期再次保存更新原记录,不产生重复日期。 +- 最近复盘只显示每日复盘,不混入个股笔记。 +- 历史记录可展开和收起;超出视口时可滚动。 + +### 16.3 个股笔记 + +- 只在对应股票详情查看。 +- 包含复盘内容和明日计划。 +- 按用户隔离,可保存、更新和删除。 +- 个股笔记不自动进入“最近复盘”。 + +### 16.4 交易日志 + +- 主页面显示“交易日志”按钮,点击后打开录入弹窗。 +- 保存后记录留在当前页面;日志区域与每日复盘底端对齐。 +- 无记录时保留合理空白;记录超过区域时仅日志内部滚动。 +- 字段:交易日、代码、名称、动作、价格、数量、仓位、盈亏金额、盈亏百分比、情绪、标签、交易逻辑、执行复核。 +- 动作:买入、卖出、加仓、减仓、观察。 +- 情绪:平静、笃定、犹豫、焦虑、冲动。 +- 支持编辑和删除。 +- 摘要:总记录、已实现记录数、胜率、累计盈亏、平均仓位。 +- 胜率只统计已填写盈亏金额或盈亏百分比的记录;盈亏>0为胜,等于0不计胜;未实现记录不进胜率。 +- 累计盈亏只加总已填写的盈亏金额;平均仓位只对有效仓位取算术平均。 + +### 16.5 提醒中心 + +- 站内提醒按账号隔离。 +- 支持全部/未读筛选、全部标为已读。 +- 手动提醒字段:标题(必填,最多80字)、提醒日期、股票代码(可选,最多12字)、内容(可选,最多500字)。 +- 支持单条标为已读和删除。 +- 到期前提醒显示“未到期”;只有到期提醒计入当前未读角标。 +- 策略跟踪有T+1反馈和T+5全部完成时自动生成提醒,使用批次幂等键去重。 + +### 16.6 复盘助手 + +- 非会员显示与会员相同界面,顶部提示“复盘助手仅对会员开放”,下方内容灰化不可用。 +- 读取共享市场统计,以及当前账号的策略跟踪、提醒、每日复盘、自选和交易日志。 +- 流式回答并按账号保存历史。 +- 快捷问题:市场位置、市场主线、交易复盘、明日清单。 +- 不修改用户数据,不执行交易。 +- 回答区分“市场事实”“用户记录”“推断”,只给条件化计划。 +- 默认回答不超过800个中文字符,除非用户明确要求展开。 + +## 17. 选股因子数据字典 + +### 17.1 通用约定 + +- 百分比字段使用百分数值,例如5%保存为5,而不是0.05;明确标为0至1排名/比例的字段除外。 +- 排名字段统一为0至1,1表示横截面最靠前。 +- 布尔信号使用成立/不成立,不得把缺失值当作不成立。 +- “相对强度”必须在同一交易日、同一股票范围内计算。 +- 财务字段按最近一个在选股日期之前已经公告的报告期取值,禁止未来函数。 +- 股票历史不足某因子窗口时,该因子为空,不以0代替。 + +### 17.2 行情动量 + +| 标准字段 | 中文含义 | 口径 | +|---|---|---| +| close | 收盘价 | 目标日收盘或有效实时价,元 | +| pct_chg | 当日涨幅 | 相对正确前收盘,% | +| return_5d | 5日涨幅 | 当前收盘相对5个交易日前收盘,% | +| return_10d | 10日涨幅 | 当前收盘相对10个交易日前收盘,% | +| return_20d | 20日涨幅 | 当前收盘相对20个交易日前收盘,% | +| return_60d | 60日涨幅 | 当前收盘相对60个交易日前收盘,% | +| return_5d_rank | 5日涨幅排名 | 全市场横截面0至1 | +| momentum_60_5 | 中期动量 | `第5日前收盘/第60日前收盘-1`,% | +| momentum_60_5_rank | 中期动量排名 | 全市场横截面0至1 | +| above_ma20 | 站上20日线 | 收盘价>MA20 | +| rsi_6 | RSI(6) | 标准6日RSI,0至100 | +| ma60_slope | 60日线斜率 | 当前MA60相对5日前MA60变化,% | +| ma20_slope_5d | 20日线5日斜率 | 当前MA20相对5日前MA20变化,% | +| ma_bull_alignment | 均线多头排列 | MA5>MA10>MA20>MA60 | +| drawdown_from_high_250 | 距250日高点回撤 | `1-收盘/250日最高价`,% | +| donchian_breakout_pct | 唐奇安突破幅度 | 收盘相对前20日最高价的超越幅度,% | +| range_20d | 20日振幅 | 前20日最高/最低-1,% | +| rs_high_120 | RS线120日新高 | 股票价格/沪深300价格之比是否创120日新高 | +| excess_return_60d | 60日超额收益 | 股票60日收益-沪深300 60日收益,百分点 | +| weekly_trend_signal | 周线趋势信号 | 周线MACD的DIF>0且DEA>0 | +| daily_buy_trigger | 日线买点 | 日线MACD金叉,或回踩MA20后收阳 | +| weekly_amount_trend | 周成交趋势 | 本周成交额≥此前4周平均 | +| relative_strength | 相对强度 | 当前股票在全市场/基准下的标准化强弱,0至100或统一横截面分 | +| relative_position_60 | 60日相对位置 | `(收盘-60日最低)/(60日最高-60日最低)`,0至1 | +| max_abs_change_15d | 15日最大波动 | 近15日单日涨跌幅绝对值最大值,% | +| close_to_high_15d | 距15日高点 | 收盘/15日最高价,0至1 | +| close_to_high_60d | 距60日高点 | 收盘/60日最高价,0至1 | + +### 17.3 量价与资金 + +| 标准字段 | 中文含义 | 口径/单位 | +|---|---|---| +| volume_ratio_5d | 5日量比 | 当日量/此前5日平均量 | +| turnover_5d | 5日累计换手 | 最近5日换手率之和,% | +| volatility_10d | 10日波动率 | 最近10个单日涨跌幅的总体标准差 | +| amount_billion | 成交额 | 亿元 | +| turnover_rate | 换手率 | % | +| circ_mv_billion | 流通市值 | 亿元 | +| total_mv_billion | 总市值 | 亿元 | +| net_flow_million | 主力净流入 | 百万元,供应商统一口径 | +| large_flow_million | 大单净流入 | 百万元 | +| net_flow_5d_million | 5日主力净流入 | 最近5日主力净流入之和,百万元 | +| flow_to_circ_mv_5d | 5日净流入占流通市值 | 5日净流入/流通市值,% | +| previous_amount_billion | 昨日成交额 | 亿元 | +| intraday_min_pct | 盘中最大跌幅 | 当日最低相对前收,% | +| lower_shadow_ratio | 下影线实体比 | 下影长度/实体绝对长度;无实体但有下影时上限值10 | +| vol_vs_previous | 较前日量能 | 当日成交量/前日成交量 | +| vol_vs_broken_day | 较断板日量能 | 当日成交量/断板日成交量 | + +### 17.4 板块、涨跌停与形态 + +| 标准字段 | 中文含义 | +|---|---| +| sector_strength | 板块强度 | +| sector_return_5d | 行业5日涨幅 | +| sector_return_20d | 行业20日涨幅 | +| sector_momentum_rank | 行业20日动量排名,0至1 | +| sector_stock_momentum_rank | 行业内个股动量排名,0至1 | +| sector_net_flow_5d_million | 行业5日主力净流入,百万元 | +| sector_flow_rank | 行业资金流排名,0至1 | +| sector_prosperity_rank | 行业景气度排名,0至1 | +| sector_trend_rank | 行业趋势排名,0至1 | +| sector_crowding_rank | 行业拥挤度排名,0至1,越高越拥挤 | +| sector_composite_score | 行业三维综合分 = 景气40% + 趋势30% + (1-拥挤)30% | +| sector_limit_count | 板块涨停数 | +| sector_up_count | 板块强势股数 | +| sector_breadth_ma20 | 行业成分站上20日线比例,% | +| limit_streak | 当日连板高度 | +| previous_limit_streak | 昨日连板高度 | +| previous_first_limit | 昨日是否首板 | +| previous_limit_signal | 昨日是否涨停或触板 | +| is_limit_up_today/is_limit_down_today | 当日是否涨停/跌停,按当日有效制度计算 | +| no_limit_30d | 近30日无涨停 | +| had_limit_80d | 近80日较早区间曾涨停,用于活跃记忆 | +| no_limit_down_20d | 近20日无跌停 | +| financial_risk | 财务风险标记:ST/退市或净利同比≤-100%等已确认风险 | +| is_market_height | 是否当前市场最高板,且市场高度至少2板 | +| new_space_board | 是否相对前日新晋空间板 | +| max_continuous_board_10d | 近10日最高连续涨停数 | +| dragon_first_yin | 三板及以上断板后的首次阴线 | +| yin_day_pct | 首阴当日涨跌幅,% | +| broken_reversal | 是否满足断板后反包结构 | +| days_since_broken | 断板后交易日数 | +| close_above_broken_high | 是否收复断板日高点 | +| recent_limit_up_5d | 近5日涨停次数 | + +### 17.5 竞价、估值与财务 + +| 标准字段 | 中文含义 | 单位/规则 | +|---|---|---| +| auction_change | 竞价涨幅 | 9:25竞价相对前收,% | +| auction_amount_million | 竞价成交额 | 百万元 | +| auction_turnover_rate | 竞价换手率 | % | +| auction_volume_ratio | 竞价量比 | 倍 | +| pe_ttm | 市盈率TTM | 倍,亏损时可为空/负值按策略过滤 | +| pb | 市净率 | 倍 | +| ps_ttm | 市销率TTM | 倍 | +| dividend_yield_ttm | 股息率TTM | % | +| dividend_years | 近年持续分红 | 可核验年度数,不把缺失年份算分红 | +| roe/roa/roic | 净资产/总资产/投入资本回报率 | % | +| gross_margin | 销售毛利率 | % | +| netprofit_yoy/revenue_yoy | 净利/营收同比 | % | +| ocf_to_opincome | 经营现金流质量 | 经营现金流相关比率,倍 | +| earnings_surprise_pct | 业绩超预期幅度 | 同报告期预告与快报/实际差异,% | +| earnings_days_since_announce | 业绩公告后天数 | 交易日数,不是自然日 | +| earnings_event_quality | 业绩事件质量 | 公告日未出现放量阴线等否决条件;缺数据为空 | + +### 17.6 人气、席位、风格与多因子 + +| 标准字段 | 中文含义 | +|---|---| +| popularity_score | 同花顺/东方财富人气综合分 | +| popularity_rank_change | 人气排名跃升幅度 | +| popularity_dual_source | 是否双榜共识 | +| institution_net_buy_million | 机构席位净买入,百万元 | +| institution_seat_count | 机构专用席位数量 | +| style_size_fit | 当前大小盘风格匹配度,0至1 | +| style_growth_fit | 当前成长/价值风格匹配度,0至1 | +| style_fit_score | 上述两类可用匹配度的均值 | +| factor_value_score | PE、PB低优与股息率高优的百分位均值 | +| factor_growth_score | 营收、净利同比高优的百分位均值 | +| factor_quality_score | ROE、ROIC、毛利率高优的百分位均值 | +| factor_momentum_score | 中期动量、相对强度高优的百分位均值 | +| factor_sentiment_score | 换手率、5日量比高优的百分位均值 | +| multi_factor_composite | 五类因子按当前动态权重合成,0至1 | + +风格匹配当前基线: + +- 按总市值横截面前30%定义大盘、后30%定义小盘,比较两组20日平均收益,选择占优方向。 +- 成长因子分前30%和价值因子分前30%分别计算20日平均收益,选择占优方向。 +- 单股大小盘匹配度与成长/价值匹配度取均值形成总匹配度。 + +## 18. LLM统一行为 + +### 18.1 适用功能 + +问师、问天解读、复盘助手和自然语言策略编译共用统一LLM行为:鉴权、会员检查、额度、模型选择、流式协议、取消、审计和错误转换。 + +### 18.2 调用与回退 + +- 调用前验证登录、功能权限、会员/管理员访问权和当日额度。 +- 主模型失败且尚未输出任何内容时,可尝试辅助模型一次。 +- 已开始输出后禁止切换模型重放答案。 +- 用户停止生成后,尽快终止上游读取,保留已输出内容并标记已停止。 +- 超时、模型满载、限流、认证失败和网络失败使用不同的用户安全提示。 +- “Selected model is at capacity”表示上游模型容量不足,不是业务数据错误;可在未输出前切辅助模型。 +- 同一次业务请求只结算一次额度,主/辅助重试不重复扣次。 + +### 18.3 审计与隐私 + +每次调用记录:账号、功能、模型池条目、主/辅助角色、开始时间、耗时、成功/失败、错误类型、提示词版本、输入输出量和关联业务ID。日志不得记录API Key、访问Token、原始出生资料或完整私密Skill内容。 + +用户界面不得显示:模型真实名称、服务地址、供应商错误原文、Tushare/iFinD接口名、数据库名或堆栈。管理员诊断页可查看脱敏的错误类型、提供方和关联ID。 + +## 19. 视觉、主题与可访问性 + +### 19.1 视觉目标 + +整体是安静、克制、适合长时间复盘的专业工作台,不是营销落地页。页面不能像无样式Excel,也不能用大量装饰卡片制造层级。视觉层级来自: + +- 页面标题与核心指标。 +- 清晰的模块分区和12px间距。 +- 统一字号、字重和对齐。 +- 有节制的状态色。 +- 数据密度和留白平衡。 + +同级模块之间保留明确空隙,不允许直接粘连成一整块表格。标准卡片圆角为10px;单元格圆润但不松散。Hover移动和阴影变化平滑,不能突然跳动。 + +### 19.2 视觉令牌 + +日间色板: + +| 语义 | 色值 | +|---|---| +| 主操作/激活 | `#2563eb` | +| 主操作Hover | `#1d4ed8` | +| 激活浅底 | `#eff4ff` | +| 激活描边 | `#c7d8fb` | +| 上涨/积极 | `#e04536`,浅底`#fdecea` | +| 下跌/消极 | `#16a34a`,浅底`#e9f7ee` | +| 警示 | `#b45309`,浅底`#fdf3e3` | +| 主文字 | `#1f2937` | +| 次文字 | `#6b7280` | +| 辅助文字 | `#9ca3af` | +| 边框 | `#e5e7eb` | +| 行分隔 | `#eef0f3` | +| 页面背景 | `#f4f5f7` | +| 卡片背景 | `#ffffff` | + +夜间色板: + +| 语义 | 色值 | +|---|---| +| 页面背景 | `#121416` | +| 卡片背景 | `#1b1e21` | +| 次级表面 | `#202428`;更高层`#24282d` | +| 边框 | `#343a40`;强调边框`#474f57` | +| 主文字 | `#e8eaed` | +| 次文字 | `#adb5bd` | +| 辅助文字 | `#7f8993` | +| 主操作 | `#6ca8e8`;Hover`#8bbcf0`;浅底`#23364a` | +| 上涨/积极 | `#f06d73`;浅底`#40262a` | +| 下跌/消极 | `#43bc8a`;浅底`#1d382f` | +| 警示 | `#e2ad58`;浅底`#3d3220` | + +问天夜间外壳仍使用全站夜间页面背景;星空为低透明叠层,不另起一块不协调的深色页面。问天传统文化强调色可使用鎏金`#c9a55c`,装饰星空透明度不高于0.15。 + +尺寸令牌: + +- 间距只使用4、8、10、12、14、16、22、26、34px。 +- 卡片头内边距11px 14px;卡片内容垂直12至14px、水平14至16px。 +- 表头8px 12px;舒适表格单元格9px 12px;紧凑5px 12px。 +- 常规按钮6px 13px;小按钮4px 9px;标签1.5px 7px。 +- 卡片圆角10px;按钮和输入框7px;标签5px;徽章4至6px。 +- 卡片阴影`0 1px 2px rgba(16,24,40,.05)`;浮层阴影`0 12px 32px rgba(0,0,0,.18)`。 +- 过渡150至250毫秒ease,只用于opacity、transform和background;禁止全局`transition: all`和大位移。 + +### 19.3 字体与数字 + +- 正文以易读的中文无衬线字体为主;问天标题和传统文化文案可使用统一衬线字体。 +- 页面主标题17px/800,一页只允许一个。 +- 大数字18至26px/800,一页不超过4个。 +- 卡片标题14px/700。 +- 正文和按钮13px/400至500。 +- 表格正文12.5px/400;股票名称13px/700。 +- 表头12px/600。 +- 次要说明11.5至12px/400;辅助/来源/占位10.5至11px/400。 +- 不随视口宽度连续缩放字号。 +- 字间距为0,不使用负字距。 +- 数值使用等宽数字。 +- 表格数值右对齐,文本左对齐,短状态可居中。 +- 长文字允许换行或省略并提供完整查看,不能遮挡相邻列。 + +### 19.4 表格 + +- 列宽按内容类型分配:序号/标签最窄,代码固定适中,名称适中,数值等宽,原因/逻辑/线索最宽。 +- 单位写入表头,例如“成交额(亿)”“涨跌幅(%)”。 +- 空值留空;整表无数据时显示空态。 +- 可排序列在表头显示克制的排序图标和当前方向。 +- 表头在日间和夜间均与表体有清晰但不刺眼的层级。 +- 仅数据区允许局部滚动;如果页面被明确规定为全页滚动,则不能再形成令人困惑的双滚动。 + +通用页面网格只使用以下模式:主表+372px右栏、主表+320px窄右栏、主区+340至400px中右栏、双卡1:1、全宽单列;间距均为12px。集合竞价优先372px右栏,天梯/股池优先320px,情绪周期约340px,题材库右侧为主区且左侧排行更窄。1400px以下右栏可收窄20至32px,不能压缩主表到不可读。 + +### 19.5 日间与夜间 + +- 日间是清爽宣纸浅色,不使用大面积纯白卡片叠纸效果。 +- 夜间是中性深色,不使用单一深蓝/紫色覆盖全站。 +- 红涨绿跌在两种主题中保持一致且对比达标。 +- 所有搜索框、表头、空态、加载骨架、弹窗、策略库、标签、图表背景和Hover都必须有双主题样式。 +- 主题切换一次性应用,目标为无白闪、无表格滞后、无明显卡顿。 +- 用户主题选择持久化到本机;登录前后保持一致。 + +### 19.6 交互与可访问性 + +- 所有可点击元素有明确Hover、Focus和Disabled状态。 +- 键盘可到达搜索、导航、标签、表格操作和弹窗。 +- Disabled不能只降低透明度到不可辨认,仍需保持文字可读并说明原因。 +- 颜色不是唯一状态信号;涨跌、通过/失败同时使用文字或图标。 +- 常规正文与背景对比度目标≥4.5:1,大字≥3:1。 +- 动效遵守系统“减少动态效果”偏好。 +- 加载动画不能阻止用户取消LLM请求。 + +## 20. 分辨率与移动端规范 + +### 20.1 已确认标准 + +- PC与移动端使用相同功能权限、数据口径、账号数据和业务结果。 +- 移动端允许独立页面壳、布局和交互,不要求像素复刻PC。 +- 移动端不能只是缩小字体、卡片和桌面表格。 +- 页面本身不得横向溢出。 +- 宽表可在局部横向滚动,或重组为摘要列表+详情。 +- 触控目标至少44×44px。 +- 固定栏预留安全区。 +- 手机不使用Hover作为唯一入口。 +- 系统管理、复杂模型池和高密度自定义因子配置可以定义为“PC完整支持”;移动端提供查看、简化编辑或提示使用PC。 + +### 20.2 PC分辨率行为 + +- 1920×1080是最低完整可用桌面基线:核心操作在无需极端缩放的情况下可见,长页采用清晰的全页滚动。 +- 1280至1536宽度:保持200px侧栏;必要时次要列隐藏到详情,不能压缩到文字重叠。 +- 4K:限制主内容最大可读宽度或增加信息密度,不把字号、卡片和留白简单放大两倍。 +- 高度不足时,优先全页滚动;不要固定上半页后只给表格几行高度。 +- 情绪周期、板块轮动、智能选股和问天已经确认采用可达的全页滚动策略。 + +### 20.3 移动端目标信息架构 + +手机底部五个一级入口: + +1. 行情。 +2. 选股。 +3. 问师。 +4. 问天。 +5. 复盘。 + +“行情”下的情绪、股池、天梯、板块、竞价、题材、热榜、龙虎榜通过顶部选择器或抽屉切换,不在底部放16个入口。 + +移动页面原则: + +- 主内容单列。 +- 核心摘要优先,详细表格按需展开。 +- 表格在320px宽度下至少能看到名称、关键状态和主数值;其余进入详情。 +- 弹窗改为底部抽屉或全屏页时,必须保留关闭和返回路径。 +- 键盘弹出后输入框和发送按钮保持可见。 +- 问师和复盘助手对话输入区不遮挡最后一条消息。 +- 问天动画适配窄屏且不裁切关键文字。 + +### 20.4 当前实现基线与待设计项 + +当前实现基线:PC端已具备多档宽度适配和部分移动端规则,但整体移动交互仍未达到可用验收标准。 + +待设计或待升级: + +- 逐页移动版信息层级和组件打样。 +- 复杂股池表、竞价和自定义选股的移动交互。 +- 手机横屏策略。 +- 平板分栏策略。 + +因此,重建者不得把现有移动布局原样当作最终标准;必须依据本节目标单独设计,并经人工验收。 + +### 20.5 验收视口 + +至少测试:320、375、390、430、768、1024、1280、1440、1536、1920×1080、3840×2160,以及手机横屏。每个视口检查:无页面横向溢出、无内容遮挡、无不可达操作、无双滚动冲突、文字不溢出、主题完整。 + +## 21. 状态、异常与反馈规则 + +### 21.1 统一页面状态 + +每个数据模块必须有以下互斥状态: + +1. 初始未操作。 +2. 加载中。 +3. 成功且有数据。 +4. 成功但无符合条件数据。 +5. 所需数据缺失。 +6. 权限不足/会员锁定。 +7. 上游暂不可用。 +8. 请求超时。 +9. 使用最近真实快照。 + +“暂无符合条件”只用于数据完整且条件没有命中的情况;“数据缺失”必须列出缺什么;“上游失败”不能覆盖成空结果。 + +### 21.2 用户错误信息 + +- 使用用户能理解的业务语言。 +- 不显示本机路径、HTTP堆栈、Token、模型名、接口URL或供应商原始响应。 +- 提供可执行下一步:重试、查看前一交易日、联系管理员同步、补录数据或稍后再试。 +- 同一失败不能同时弹多个Toast、空态和异常长弹窗。 + +### 21.3 网络与服务恢复 + +- 页面请求可设置超时;用户可重试。 +- 读请求失败不清空屏幕上已有的最后成功数据,除非用户切换到不同实体/日期。 +- 写请求超时后必须先查询是否已保存,避免用户重复提交。 +- 后台任务失败记录失败原因、时间、数据覆盖和重试状态。 +- 进程重启后,已完成的盘后任务不能重复产生不同结果。 + +### 21.4 已知异常弹窗防线 + +历史版本曾出现“正常业务弹窗关闭后又出现超长空弹窗,无法关闭,只能刷新”的缺陷。最终标准: + +- 业务成功反馈统一使用Toast。 +- 打开弹窗前校验内容和弹窗类型。 +- 弹窗内容区必须有最大宽高和可控滚动。 +- 关闭后清理内容、遮罩和焦点状态。 +- 全站扫描所有保存、删除、添加、导出和LLM完成场景,禁止把普通返回对象当作弹窗HTML渲染。 + +## 22. 数据持久化、备份与安全 + +### 22.1 持久化要求 + +- 当前适合局域网单实例部署,持久化数据库支持事务和写前日志。 +- 所有用户私有记录保留账号所有权和创建/更新时间。 +- 共享快照按交易日和数据版本唯一归档。 +- 盘后计算记录输入快照、算法版本和输出版本。 +- 数据库结构升级必须有顺序版本、幂等迁移和升级记录。 +- 未来迁移到其他数据库时,不改变产品数据边界和业务结果。 + +### 22.2 认证与会话 + +- 密码使用现代抗暴力哈希和独立盐,不可逆保存。 +- 登录会话使用高熵随机令牌,服务端只保存哈希。 +- 所有写操作验证CSRF令牌。 +- Cookie使用HttpOnly和SameSite;HTTPS公网部署时必须启用Secure。 +- 会话到期后回到登录页,未提交内容给出合理提示。 +- 不允许仅依靠前端隐藏按钮实现权限控制;服务端再次鉴权。 + +### 22.3 密钥与敏感资料 + +- 行情Token、iFinD令牌、模型API Key、加密密钥不得进入Git、浏览器存储或普通日志。 +- 系统凭据和出生资料加密保存。 +- 加密密钥与数据库必须一起备份;丢失密钥后不得伪称可恢复密文。 +- 私有“小白”Skill不进入公开仓库和镜像。 +- 普通用户不能读取或修改系统级凭据。 + +### 22.4 备份与恢复 + +- 每次升级前备份数据库、加密密钥、环境配置和私有Skill。 +- 数据库备份必须使用一致性快照方式,不能在写入中只复制单个主文件而遗漏写前日志。 +- 至少保留最近7个日备份、4个周备份;具体保留期可由部署者提高。 +- 恢复演练至少验证:账号登录、共享快照、用户自选/复盘、会员状态、模型配置、问天历史和策略结果。 +- 回退代码时不能自动回退已迁移数据;每个破坏性迁移必须提供明确恢复方案。 + +### 22.5 运行与部署基线 + +- 时区固定为Asia/Shanghai。 +- 默认服务端口8765,可通过部署配置更改。 +- 数据目录必须持久化,容器重建不能丢数据。 +- 运行进程使用非管理员用户、只读应用文件系统、最小权限和自动重启。 +- 提供健康检查,区分进程、数据库、数据源、后台任务和模型状态。 +- 数据源降级不等同于整个网站不可用;已归档数据仍应可读。 +- 日志轮转,默认单文件不超过10MB、保留3个;不得记录密钥。 +- 局域网HTTP可运行;转向公网前必须增加反向代理、TLS、可信Host、限流、审计、集中密钥和正式备份。 + +## 23. 后台任务与运行状态 + +### 23.1 行情刷新 + +- 输入为请求交易日。 +- 同一时间只能有一个行情刷新任务。 +- 任务记录开始、完成、失败、来源覆盖、输出版本和耗时。 +- 超时目标120秒;实时轮询任务失败不立即覆盖最后成功快照。 + +### 23.2 盘后智能选股 + +- 交易日15:10后且当日行情刷新成功、因子达到最低覆盖后执行。 +- 同一交易日、同一策略版本只完成一次。 +- 最长运行目标15分钟;超过后标记失败并保留逐策略状态。 +- 单个策略数据缺失不阻止其他数据完整的策略运行。 +- 阶段策略、29套精选策略分别记录结果。 + +### 23.3 事件补充 + +- 涨停、炸板、跌停原因等事件数据在收盘后按需补充。 +- 补充来源不能覆盖管理员人工修订;人工修订具有更高优先级并保留修订记录。 +- iFinD试用或令牌到期时,显示事件补充暂不可用,不影响已有Tushare快照。 + +## 24. 当前实现基线与已知待改进 + +本节不是最终标准,只用于避免重建时误判现状。 + +### 24.1 当前实现基线 + +- 单体Web应用可在本机或局域网容器运行。 +- 已有16个工作区、内部策略跟踪页、账户、会员和系统管理。 +- 已有共享行情快照、用户私有数据、日间/夜间、搜索、图表和LLM流式能力。 +- 已有36套内置策略和自定义公式执行。 +- 已有问天三模块和确定性历法/卦象计算。 + +### 24.2 不得继承为标准的缺陷 + +- 移动端当前总体不可用或交互较差。 +- 部分页面仍可能存在多层CSS覆盖和历史布局残留。 +- 旧说明中“策略运行即自动跟踪”已经废止。 +- 旧说明中“用户手动同步因子、手动执行阶段/策略选股”已经废止。 +- 旧观心30秒/40秒呼吸说明已经废止,当前标准为准备1秒+5轮×9秒。 +- 历史上用公开网页源参与观势替代计算的行为已经收紧;安全门不通过应失败关闭。 +- 多因子“IC动态加权”仍是基础版,不得夸大。 + +### 24.3 待设计或待升级清单 + +- 完整移动端逐页设计与验收。 +- 多因子12个月Rank IC季度重算及中性化。 +- 稳定的隔夜消息量化和政策/宏观序列。 +- Level-2动态竞价委托队列。 +- 分析师一致预期。 +- 游资档案的更完整历史画像;当前不是高优先级。 +- 公网部署的多实例、PostgreSQL、队列、缓存和集中监控;当前不在局域网版本范围内。 + +## 25. 固定验收案例 + +以下案例全部通过,才可声称产品行为重建完成。 + +### 25.1 账户、权限与隔离 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| A01 | 空系统注册第一个账号 | 该账号成为管理员,能看到后台刷新和系统管理 | +| A02 | 注册第二个账号 | 第二个账号为普通用户,不显示管理员按钮 | +| A03 | 管理员同时开通会员 | 顶部同时显示管理员和会员标识 | +| A04 | 管理员未开会员 | 可测试智能功能,但会员页仍显示未开通,不伪装会员 | +| A05 | 普通用户打开智能选股 | 页面结构完整,顶部会员提示,下方灰化不可操作 | +| A06 | 用户甲、乙分别添加不同自选 | 甲乙互相看不到对方自选 | +| A07 | 用户甲写每日复盘、个股笔记和交易日志 | 用户乙任何入口均无法读取、修改或删除 | +| A08 | 非管理员直接请求系统管理写操作 | 服务端拒绝,即使手工构造请求也不能成功 | +| A09 | 修改密码时当前密码错误 | 不修改密码,显示安全提示 | +| A10 | 点击账户菜单五项 | 个人资料、会员状态、修改密码、切换账号、退出均独立可用 | + +### 25.2 日期与数据真相 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| D01 | 2026-07-22 9:15前打开网站 | 显示2026-07-21 15:00真实收盘数据,不显示模拟数据 | +| D02 | 周六打开网站 | 显示最近交易日15:00并标真实日期 | +| D03 | 盘中10:23有最新快照 | 数据时间显示最近刷新时刻,不提前显示15:00 | +| D04 | 收盘后最终同步完成 | 数据时间显示当日15:00 | +| D05 | 选择历史日期 | 不混入今天实时行情 | +| D06 | 今天取数失败但有昨日快照 | 页面仍可用,明确显示昨日日期和“沿用最近快照” | +| D07 | 全新系统无任何快照 | 显示等待管理员首次同步,无演示数字 | +| D08 | 点击后台刷新 | 当前页面不自动跳转或重绘;普通刷新后读取新快照 | +| D09 | 7月29日打开,最新可用为29日 | 顶栏默认29日,默认页面为情绪周期 | + +### 25.3 图表与详情 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| C01 | 开盘前悬浮股票代码 | 日K止于最后真实交易日,不制造今天空K线 | +| C02 | 页面选择历史日后悬浮股票 | 悬浮日K仍显示最近真实行情 | +| C03 | 切换分时 | 横轴固定9:30至15:00,未到时间段保留空白,有昨收0轴 | +| C04 | 查看上涨K线 | 红色空心,影线不穿过实体 | +| C05 | 夜间首次加载图表 | 加载背景不闪白 | +| C06 | 打开个股详情 | 有完整个股笔记、资金流、事件逻辑和观势入口 | +| C07 | 打开板块/题材/指数详情 | 有行情图,无个股笔记和个股事件逻辑 | +| C08 | 检查涨跌幅 | 使用正确前收,详情摘要与K线数据一致 | + +### 25.4 情绪与市场页面 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| M01 | 市场宽度≤15且跌停≥100 | 情绪温度不超过15,阶段进入/保持冰点 | +| M02 | 冰点后单日只升3分 | 不直接转修复 | +| M03 | 发酵条件仅一天成立 | 不直接从修复转发酵 | +| M04 | 当前阶段为退潮 | 警示只描述情绪走弱,不出现选股建议 | +| M05 | 切换10/20/60日 | 明细范围改变,默认20日;表格最后一行可完整查看 | +| M06 | 涨停池筛选3板+仅1行 | 底部风险提示仍在固定状态栏,不随表格上移 | +| M07 | 市场天梯展开很多股票 | 可滚动且可收起,单元格保持等宽栅格 | +| M08 | 市场高度7板 | 涨停表现动态容纳7板,右侧今日结论不留异常空缺 | +| M09 | 点击板块轮动某板块 | 下方显示该日申万成分股,并跨日期高亮同名板块 | + +### 25.5 集合竞价、题材、热榜、龙虎榜 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| X01 | 9:20且动态iFinD可用 | 状态为观察中,显示真实快照时间 | +| X02 | 9:20但动态数据不可用 | 不把Tushare最终竞价伪装为动态数据 | +| X03 | 9:26 | 使用9:25最终竞价形成筛选结果 | +| X04 | 一字板候选 | 单独进入竞价一字,不参与普通异动评分 | +| X05 | 新规ST股票 | 涨跌停阈值按10%处理 | +| X06 | 市场核心超过普通上限 | 核心股票全部保留 | +| X07 | 核对竞价成交额 | 摘要数值、柱图和5日均线使用同一口径 | +| X08 | 悬浮题材名称 | 出现统一日K/分时预览;固定题材K线模块不存在 | +| X09 | 当日热榜未发布 | 显示最近有效榜单并标实际日期 | +| X10 | 龙虎榜有76只上榜但席位不可识别 | 明确显示有榜单、待归类/席位缺失,不显示“无龙虎榜数据” | +| X11 | 点击游资档案 | 进入左名录右详情,不弹超长框 | + +### 25.6 智能选股 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| S01 | 当日阶段为退潮 | 只影响阶段选股;29套精选策略仍逐套运行 | +| S02 | 精选策略数据完整但无命中 | 显示“暂无符合条件个股” | +| S03 | 精选策略缺ROIC数据 | 显示缺少ROIC/财务覆盖,不显示“暂无信号” | +| S04 | 同策略同日期刷新前后 | 候选顺序和分数一致 | +| S05 | 先运行/查看退潮策略,再切分化 | 两个阶段结果分别保留 | +| S06 | 在策略选股切三个策略 | 各策略候选保留且明确标来源 | +| S07 | 阶段/策略/自定义三模式切换 | 结果不会同时出现在三页或互相覆盖 | +| S08 | 盘后任务未执行 | 四步状态显示未执行,不显示已完成对号 | +| S09 | 用户执行自定义选股 | 由条件和数据确定计算,不调用LLM筛选 | +| S10 | 自定义权重不等于100% | 禁止执行并指出权重总和问题 | +| S11 | 运行策略产生候选 | 不自动进入持续跟踪 | +| S12 | 用户手动加入候选 | 进入该用户跟踪,并记录入选价 | +| S13 | 用户甲加入跟踪 | 用户乙看不到该记录 | +| S14 | T+1和T+5条件满足并多次刷新提醒 | 每类提醒只生成一次 | + +### 25.7 问师、问天与LLM + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| L01 | 问师流式完成 | 每段只出现一次,不在结尾重复完整答案 | +| L02 | 主模型输出前失败 | 可切辅助模型,用户只看到一份答案 | +| L03 | 主模型输出一半失败 | 不切辅助重放,提示连接中断并保留已输出 | +| L04 | 选择宏观模型询问市场 | 上下文含宽基指数和ETF,不强塞短线席位数据 | +| L05 | 普通用户打开问师/问天/助手 | 同结构锁定态,不能发起LLM调用 | +| W01 | 观势未输入股票 | 只提示输入代码或名称,不显示暂不成卦 | +| W02 | 中国平安所属保险行业仅5只成分且5只有行情 | 小样本但覆盖完整时行业安全门可通过 | +| W03 | 行业缺涨跌但用户补录客观值 | 按原公式重算;用户不能直接选阴阳 | +| W04 | 三大指数缺一 | 上爻安全门失败,不静默替代成卦 | +| W05 | 观气当天已解运 | 再次点击直接显示已保存结果,不重复扣额度 | +| W06 | 观心开始呼吸 | 准备1秒后5轮吸3/顿2/呼4;无轮数和倒计时 | +| W07 | 观心第一次投币 | 只出现初爻,其余显示未得 | +| W08 | 观心投满六次 | 显示本卦/之卦/卦辞,不显示六个爻解释卡 | +| W09 | 夜间打开观心 | 提示、按钮、历史和静音文字清晰可读 | + +### 25.8 复盘、主题和响应式 + +| 编号 | 前置条件与操作 | 预期结果 | +|---|---|---| +| R01 | 保存交易日志 | 当前页出现记录,只出现正常Toast,无超长空弹窗 | +| R02 | 交易日志无盈亏 | 不进入胜率分母 | +| R03 | 同日期重复保存每日复盘 | 更新原记录,不新增重复项 | +| R04 | 展开很多历史复盘 | 页面或区域可滚动且可收起 | +| U01 | 日间切夜间 | 表格、卡片、弹窗和图表同时切换,无白闪 | +| U02 | 1920×1080打开情绪周期 | 可通过全页滚动完整查看交易日明细 | +| U03 | 1920×1080打开问天观气/观心 | 下方内容可达,滚动条存在且背景一致 | +| U04 | 3840×2160打开页面 | 内容不被粗暴等比放大,信息密度合理 | +| U05 | 390×844打开 | 无页面横向溢出,底部五入口可用,触控目标≥44px | +| U06 | 320px打开宽表页 | 使用摘要列表或局部横滚,页面本身不横滚 | + +## 26. 页面覆盖矩阵 + +每一行均需针对“权限、正常数据、空数据、数据缺失、加载、失败、持久化、日间、夜间、1080P、4K、390px”完成测试。 + +| 页面/能力 | 普通 | 会员 | 管理员 | 共享/私有 | 关键持久化 | +|---|:---:|:---:|:---:|---|---| +| 情绪周期 | 可用 | 可用 | 可用 | 共享 | 日度情绪结果与版本 | +| 四类股池 | 可用 | 可用 | 可用 | 共享 | 日度快照、原因修订 | +| 涨停表现/天梯 | 可用 | 可用 | 可用 | 共享 | 日度结构结果 | +| 板块轮动 | 可用 | 可用 | 可用 | 共享 | 多日热点、成分缓存 | +| 集合竞价 | 可用 | 可用 | 可用 | 共享 | 动态快照、9:25归档 | +| 题材库/热榜 | 可用 | 可用 | 可用 | 共享 | 榜单与成分归档 | +| 龙虎榜/游资档案 | 可用 | 可用 | 可用 | 共享 | 明细、别名、档案 | +| 智能选股 | 锁定 | 可用 | 可用 | 共享结果+私有自定义 | 策略/因子版本和结果 | +| 策略跟踪 | 锁定 | 可用 | 可用 | 私有 | 跟踪批次与行情反馈 | +| 问师 | 锁定 | 可用 | 可用 | 私有对话 | 模型偏好、消息、排序 | +| 问天 | 锁定 | 可用 | 可用 | 私有历史 | 卦象、解读、当天解运 | +| 我的复盘 | 可用 | 可用 | 可用 | 私有 | 自选、复盘、日志、笔记 | +| 提醒中心 | 可用 | 可用 | 可用 | 私有 | 提醒、已读状态、去重键 | +| 复盘助手 | 锁定 | 可用 | 可用 | 私有 | 对话历史 | +| 账户/会员 | 可用 | 可用 | 可用 | 私有 | 资料、会员、使用量 | +| 系统管理 | 隐藏 | 隐藏 | 可用 | 系统 | 凭据、模型池、任务状态 | + +## 27. 重建交付门槛 + +### 27.1 功能完整性 + +- 16个主工作区、1个内部页和所有全局能力均有实现。 +- 本文全部权限和账号隔离测试通过。 +- 所有确定性算法有版本并能用固定输入复现固定输出。 +- 36套策略的准入、权重、阈值、频率和上限与本文一致。 +- 所有数据缺失与失败状态可区分。 + +### 27.2 数据与算法 + +- 每个计算字段可追溯来源、日期、单位、新鲜度和覆盖率。 +- 不存在模拟行情、静默跨源混算和未来函数。 +- 情绪、竞价、选股、观势提供固定样本回归测试。 +- 页面摘要与图表使用同一口径。 + +### 27.3 视觉与终端 + +- 逐页完成日间/夜间、1920×1080、4K和390px截图验收。 +- 无左上角弹窗、超长空弹窗、白闪、内容遮挡和不可达区域。 +- 页面边距和骨架一致,问天仅内容气质例外。 +- 移动端需人工验收后才能标记完成;不能以“有媒体查询”代替可用性验收。 + +### 27.4 安全与运维 + +- 私有数据跨账号测试通过。 +- 密钥不进入仓库、日志和浏览器。 +- 备份和恢复演练成功。 +- 升级失败可回退应用,并可恢复匹配的数据备份。 +- 局域网服务重启后,账号、行情和个人记录不丢失。 + +### 27.5 禁止的验收方式 + +以下情况不能算完成: + +- 只检查页面能打开。 +- 只测试管理员账号。 +- 只测试有数据的正常态。 +- 只在4K显示器检查比例。 +- 用旧代码行为反驳本文已确认标准。 +- 用页面隐藏代替服务端权限。 +- 用策略名称代替完整算法。 +- 用“技术上预留”冒充用户可用功能。 + +## 28. 规格变更规则 + +- 新增功能前先更新本说明书的产品行为、权限、数据和验收案例,再实施。 +- 修改算法必须增加版本号,历史结果保留原版本,不静默重算成新口径。 +- 修改数据源必须逐字段验证,不允许整站无审查切源。 +- 修改视觉必须同时验收日间、夜间、1080P、4K和移动端。 +- 删除功能前确认其数据保留、导出和回退策略。 +- “待设计或待升级”转为正式标准必须经过用户确认,并从待设计清单移入对应正文。 + +--- + +本说明书的完成标准不是“与旧代码一致”,而是:一个新的实现者只阅读本文,能够知道每个用户在每种时间、权限、数据状态和终端下应该看到什么、能做什么、系统如何计算,以及如何证明结果正确。 diff --git a/frontend/app.js b/frontend/app.js index b3552c7..0fbfd37 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -1,480 +1,3 @@ -/* PRESERVATION-SOURCE-BEGIN app.js:1-1206 */ -const { - clamp, - displayCompactDate, - escapeHtml, - formatNumber, - formatTimestamp, - localDateString, - number, - parseLocalDate, - todayString, -} = window.XiaobaiUI; - -const { - emptyStateHtml, - renderEmptyState, -} = window.XiaobaiComponents; - -const HEART_BREATH_INHALE_MS = 3_000; -const HEART_BREATH_HOLD_MS = 2_000; -const HEART_BREATH_EXHALE_MS = 4_000; -const HEART_BREATH_PREPARE_MS = 1_000; -const HEART_BREATH_CYCLE_MS = HEART_BREATH_INHALE_MS + HEART_BREATH_HOLD_MS + HEART_BREATH_EXHALE_MS; -const HEART_BREATH_ACTIVE_MS = HEART_BREATH_CYCLE_MS * 5; -const HEART_BREATH_TOTAL_MS = HEART_BREATH_PREPARE_MS + HEART_BREATH_ACTIVE_MS; -const THEME_STORAGE_KEY = "xiaobaiTheme"; -let activeThemeTransition = null; -let themeSwitchSequence = 0; - -const state = window.XiaobaiState.create({ - session: { - user: null, - csrfToken: "", - authMode: "login", - started: false, - activeView: "sentimentCycleView", - dashboardLoading: false, - dashboardRequestSequence: 0, - dashboardRequestDate: "", - adminModels: [], - globalSearchResults: [], - globalSearchActiveIndex: -1, - globalSearchRequestSequence: 0, - }, - market: { - dashboard: null, - filter: "all", - query: "", - sortKey: "streak", - sortDirection: "desc", - brokenQuery: "", - brokenSortKey: "", - brokenSortDirection: "desc", - downQuery: "", - downSortKey: "", - downSortDirection: "asc", - yesterdayFilter: "all", - yesterdayQuery: "", - yesterdaySortKey: "", - yesterdaySortDirection: "desc", - dragonTiger: null, - dragonViewMode: "daily", - dragonFilter: "all", - dragonQuery: "", - selectedDragonTraderId: "", - hotMoneyProfiles: null, - hotMoneyProfileQuery: "", - selectedHotMoneyProfileId: "", - rotationHistory: null, - rotationHistoryKey: "", - rotationSelectedSector: "", - rotationSelectedDate: "", - rotationMembers: null, - rotationMembersKey: "", - rotationMembersLoading: false, - rotationOrder: localStorage.getItem("xiaobaiRotationOrder") === "latest" ? "latest" : "oldest", - rotationLoading: false, - auctionData: null, - auctionDataset: "focus", - auctionFilter: "all", - auctionQuery: "", - auctionSortKey: "attention_score", - auctionSortDirection: "desc", - auctionLoading: false, - auctionTimer: null, - themeLibrary: null, - themeQuery: "", - selectedThemeCode: "", - themeDetail: null, - themeLoading: false, - popularityData: null, - popularitySource: "combined", - popularityQuery: "", - popularityLoading: false, - expandedLadderLevels: new Set(), - ladderSortMode: "time", - sentimentHistory: null, - sentimentRange: 20, - sentimentHistoryKey: "", - sentimentLoading: false, - }, - details: { - stockDetail: null, - activeStock: null, - stockDetailChartMode: "daily", - stockDetailIntraday: null, - stockDetailRequestSequence: 0, - entityDetailItem: null, - entityDetailPayload: null, - entityDetailChartMode: "daily", - entityDetailIntraday: null, - entityDetailRequestSequence: 0, - stockPreviewCode: "", - stockPreviewType: "stock", - stockPreviewItem: null, - stockPreviewPayload: null, - stockPreviewChart: "daily", - stockPreviewFallback: null, - initialStockOpened: false, - }, - review: { - watchlist: [], - watchlistSelection: null, - watchlistSearchResults: [], - watchlistSearchRequestSequence: 0, - editingDailyNoteId: 0, - notes: [], - tradeEntries: [], - tradeSummary: {}, - editingTradeId: 0, - alerts: [], - alertFilter: "all", - alertUnreadCount: 0, - assistantMessages: [], - assistantLoading: false, - assistantController: null, - }, - screener: { - screenerSetup: null, - screenerSetupKey: "", - screenerSetupRequestKey: "", - screenerSetupPromise: null, - selectedRegime: "", - selectedStrategy: null, - customStrategyDraft: null, - screenerRunning: false, - screenerRunningMode: "", - screenerResults: { smart: null, curated: null, quant: null }, - screenerResultContexts: { smart: null, curated: null, quant: null }, - screenerResultStore: {}, - screenerTracking: null, - screenerMode: ["smart", "curated", "quant"].includes(localStorage.getItem("xiaobaiScreenerMode")) - ? localStorage.getItem("xiaobaiScreenerMode") - : "smart", - curatedCategory: "全部", - curatedSchool: "全部", - curatedQuery: "", - curatedViewMode: localStorage.getItem("xiaobaiCuratedViewMode") === "grid" ? "grid" : "list", - selectedCuratedStrategyId: 0, - quantFilters: [], - quantScores: [], - screenerMobileView: "strategy", - }, - mentor: { - mentorSetup: null, - selectedMentorId: "", - mentorMessages: [], - mentorLoading: false, - mentorQuery: "", - mentorGrade: "all", - mentorDirectoryOpen: false, - mentorSortMode: false, - mentorSavingPreferences: false, - mentorController: null, - }, - heaven: { - heavenSetup: null, - heavenManualData: null, - personalField: null, - heavenPanel: "trend", - heavenInterpretations: { trend: "", fortune: "", heart: "" }, - heavenReadingMode: "trend", - heavenReadingTab: "current", - heavenReadingHistory: { trend: [], fortune: [], heart: [] }, - heavenReadingSelectedId: 0, - heavenReadingLoading: false, - heavenReadingError: "", - heartStage: "intro", - heartTimer: null, - heartSeconds: HEART_BREATH_TOTAL_MS / 1000, - heartBreathingEndsAt: 0, - heartLines: [], - heartThrows: [], - heartHexagram: null, - heartCurtainTimer: null, - heartStageToken: 0, - heartRevealToken: 0, - heavenPerformanceKey: "", - heavenPerformancePanels: new Set(), - heavenPerformanceActive: "", - heavenRequestSequence: 0, - }, -}); - -window.XiaobaiAPI.configure({ - csrfToken: () => state.csrfToken, - onUnauthorized: () => showAuthGate("登录状态已失效,请重新登录。"), -}); - -const applicationShell = window.XiaobaiShell.create({ - state, - pages: window.XiaobaiPages, - motionEnabled, - animateRows, - refreshIcons, - tradeDate: () => displayCompactDate( - state.dashboard?.meta?.trade_date || document.querySelector("#tradeDate")?.value || "", - ), - onNavigate: (viewId) => openView(viewId), - onNavigationSync: () => toggleAccountDropdown(false), -}); - -const pageModules = window.XiaobaiPageModules.create({ - pages: window.XiaobaiPages, - actions: { - closeTransientUi: () => closeStockPreview(), - applyAccess: () => applyMembershipAccess(), - clearAuction: () => clearAuctionTimer(), - stopHeaven: () => { - stopQiFieldCanvas(); - stopHeartDust(); - cancelHeavenPerformance(); - }, - loadSentiment: () => loadSentimentHistory(), - loadRotation: () => loadRotationHistory(), - loadAuction: () => loadAuctionCenter(), - loadThemes: () => loadThemeLibrary(), - loadPopularity: () => loadPopularity(), - loadDragonTiger: () => loadDragonTiger(), - loadReview: () => loadReviewWorkspace(), - loadScreener: () => { - if (hasMemberAccess() && state.dashboard) loadScreenerSetup(); - }, - loadMentor: () => { - if (hasMemberAccess()) loadMentorSetup(); - }, - loadHeaven: () => { - if (!hasMemberAccess()) return; - loadHeavenSetup(false, "", document.querySelector("#heavenStockInput").value.trim()); - }, - }, -}); - -const elements = { - tradeDate: document.querySelector("#tradeDate"), - loading: document.querySelector("#loadingOverlay"), - toast: document.querySelector("#toast"), - stockDialog: document.querySelector("#stockDialog"), - tradeLogDialog: document.querySelector("#tradeLogDialog"), - watchlistDialog: document.querySelector("#watchlistDialog"), - alertsDialog: document.querySelector("#alertsDialog"), - assistantDialog: document.querySelector("#assistantDialog"), - heavenReadingDialog: document.querySelector("#heavenReadingDialog"), - globalSearchDialog: document.querySelector("#globalSearchDialog"), - globalSearchInput: document.querySelector("#globalSearchInput"), - globalSearchResults: document.querySelector("#globalSearchResults"), - entityDetailDialog: document.querySelector("#entityDetailDialog"), - entityDetailChart: document.querySelector("#entityDetailChart"), - settingsDialog: document.querySelector("#settingsDialog"), - adminDialog: document.querySelector("#adminDialog"), - priceChart: document.querySelector("#priceChart"), - stockPreview: document.querySelector("#stockPreview"), - stockPreviewBackdrop: document.querySelector("#stockPreviewBackdrop"), - stockPreviewChart: document.querySelector("#stockPreviewChart"), -}; - -function openModalDialog(dialog) { - applicationShell.openModalDialog(dialog); -} - -const metricAnimationFrames = new WeakMap(); -const stockPreviewCache = new Map(); -const STOCK_PREVIEW_DELAY = 380; -const STOCK_PREVIEW_CACHE_MS = 5 * 60 * 1000; -const LIVE_REFRESH_DEFAULT_MS = 10 * 1000; -let qiFieldAnimationFrame = 0; -let qiFieldSoloElement = ""; -let heavenPerformanceToken = 0; -let heavenReadingAnimation = null; -let heartHoldTimer = null; -let heartHoldTriggered = false; -let heartHoldStartedAt = 0; -let heartHoldAnimationFrame = 0; -let heartCastingBusy = false; -let heartDustAnimationFrame = 0; -let heartDustParticles = []; -let heartIncenseAnimation = null; -const heartCoinRotations = [0, 0, 0]; -let rowAnimationObserver = null; -let stockPreviewOpenTimer = null; -let stockPreviewCloseTimer = null; -let stockPreviewAbortController = null; -let stockPreviewAnchor = null; -let sentimentChartAnimationFrame = null; -let heavenResizeTimer = null; -let globalSearchTimer = null; -let watchlistSearchTimer = null; -let assistantRenderFrame = 0; - -const heartSound = { - enabled: false, - context: null, - ensure() { - if (!this.context) { - const AudioContextClass = window.AudioContext || window.webkitAudioContext; - if (!AudioContextClass) return null; - this.context = new AudioContextClass(); - } - if (this.context.state === "suspended") this.context.resume(); - return this.context; - }, - tone(frequency, duration, gain, type = "sine", delay = 0) { - if (!this.enabled) return; - const context = this.ensure(); - if (!context) return; - const start = context.currentTime + delay; - const oscillator = context.createOscillator(); - const volume = context.createGain(); - oscillator.type = type; - oscillator.frequency.value = frequency; - volume.gain.setValueAtTime(0.0001, start); - volume.gain.linearRampToValueAtTime(gain, start + 0.015); - volume.gain.exponentialRampToValueAtTime(0.0001, start + duration); - oscillator.connect(volume).connect(context.destination); - oscillator.start(start); - oscillator.stop(start + duration + 0.05); - }, - chime(frequency = 640) { - this.tone(frequency, 4.8, 0.12); - this.tone(frequency * 2.02, 3.6, 0.045); - this.tone(frequency * 3.96, 2.2, 0.018); - }, - coin(delay = 0) { - this.tone(2350 + Math.random() * 260, 0.28, 0.055, "triangle", delay); - this.tone(3250 + Math.random() * 260, 0.18, 0.025, "triangle", delay + 0.01); - }, -}; - -const HEART_WHISPERS = [ - ["应无所住,而生其心", 10, 12, 0], - ["不是风动,不是幡动,仁者心动", 89, 8, 1], - ["菩提本无树,明镜亦非台", 16, 52, 2], - ["本来无一物,何处惹尘埃", 84, 54, 3], - ["心外无物,心外无理", 22, 18, 4], - ["知行合一", 78, 30, 5], - ["此心光明,亦复何言", 90, 60, 6], -]; - -window.addEventListener("resize", () => { - clearTimeout(heavenResizeTimer); - heavenResizeTimer = setTimeout(() => { - if (state.activeView !== "heavenView") return; - if (state.heavenPanel === "fortune" && state.heavenSetup?.field) { - renderQiFieldCanvas(state.heavenSetup.field.balance || [], { intro: false }); - drawQiUseConnections(false); - } - if (state.heavenPanel === "heart") startHeartDust(); - }, 120); -}); - -document.addEventListener("DOMContentLoaded", initialize); - -function syncThemeControl() { - const theme = document.documentElement.dataset.theme === "dark" ? "dark" : "light"; - const button = document.querySelector("#themeToggle"); - if (!button) return; - const dark = theme === "dark"; - const label = dark ? "切换到日间模式" : "切换到夜间模式"; - button.title = label; - button.setAttribute("aria-label", label); - button.setAttribute("aria-pressed", String(dark)); - button.querySelector("i")?.setAttribute("data-lucide", dark ? "sun" : "moon"); -} - -function clearThemeTransitionEffects() { - document.querySelectorAll(".row-enter, .row-pending, .view-entering").forEach((element) => { - element.classList.remove("row-enter", "row-pending", "view-entering"); - element.style.removeProperty("--row-delay"); - }); -} - -function redrawThemeSensitiveVisuals() { - if (!elements.stockPreview.hidden && state.stockPreviewPayload) { - selectStockPreviewChart(state.stockPreviewChart); - } - if (elements.stockDialog.open) { - if (state.stockDetailChartMode === "intraday" && state.stockDetailIntraday?.points?.length) { - drawIntradayCanvas( - elements.priceChart, - state.stockDetailIntraday.points, - [], - state.stockDetailIntraday.meta?.previous_close, - ); - } else if (state.stockDetail?.prices) drawPriceChart(state.stockDetail.prices); - } - if (elements.entityDetailDialog.open) { - if (state.entityDetailChartMode === "intraday" && state.entityDetailIntraday?.points?.length) { - drawIntradayCanvas( - elements.entityDetailChart, - state.entityDetailIntraday.points, - [], - state.entityDetailIntraday.meta?.previous_close, - ); - } else if (state.entityDetailPayload?.series) { - drawEntityDetailChart(state.entityDetailPayload.series); - } - } - if (state.activeView === "sentimentCycleView" && state.sentimentHistory) { - drawSentimentTrendChart(state.sentimentHistory.rows || []); - } - if (state.activeView === "heavenView") { - if (state.heavenPanel === "fortune" && state.heavenSetup?.field) { - renderQiFieldCanvas(state.heavenSetup.field.balance || [], { intro: false }); - drawQiUseConnections(false); - } - if (state.heavenPanel === "heart") startHeartDust(); - } -} - -function commitTheme(normalized, persist) { - document.documentElement.dataset.theme = normalized; - document.documentElement.style.colorScheme = normalized; - if (persist) { - try { - localStorage.setItem(THEME_STORAGE_KEY, normalized); - } catch (_error) { - // The selected theme still applies for the current page when storage is unavailable. - } - } - syncThemeControl(); - refreshIcons(); - redrawThemeSensitiveVisuals(); -} - -function applyTheme(theme, persist = true) { - const normalized = theme === "dark" ? "dark" : "light"; - const root = document.documentElement; - if (root.dataset.theme === normalized) { - commitTheme(normalized, persist); - return; - } - const sequence = ++themeSwitchSequence; - activeThemeTransition?.skipTransition?.(); - clearThemeTransitionEffects(); - root.classList.add("theme-switching"); - - const update = () => commitTheme(normalized, persist); - const finish = () => { - if (sequence !== themeSwitchSequence) return; - clearThemeTransitionEffects(); - root.classList.remove("theme-switching"); - activeThemeTransition = null; - }; - const reducedMotion = window.matchMedia?.("(prefers-reduced-motion: reduce)").matches; - if (!reducedMotion && typeof document.startViewTransition === "function") { - activeThemeTransition = document.startViewTransition(update); - activeThemeTransition.finished.then(finish, finish); - return; - } - update(); - requestAnimationFrame(() => requestAnimationFrame(finish)); -} - -function toggleTheme() { - applyTheme(document.documentElement.dataset.theme === "dark" ? "light" : "dark"); -} - async function initialize() { syncThemeControl(); refreshIcons(); @@ -540,725 +63,6 @@ async function startAuthenticatedApp() { } } -function selectAuthMode(mode) { - state.authMode = mode === "register" ? "register" : "login"; - document.querySelectorAll("[data-auth-mode]").forEach((button) => { - button.classList.toggle("active", button.dataset.authMode === state.authMode); - }); - const registering = state.authMode === "register"; - document.querySelector("#authConfirmField").hidden = !registering; - document.querySelector("#authPasswordConfirm").required = registering; - document.querySelector("#authPassword").autocomplete = registering ? "new-password" : "current-password"; - document.querySelector("#authSubmitButton").textContent = registering ? "注册并进入" : "登录"; - document.querySelector("#authError").hidden = true; -} - -async function submitAuthForm(event) { - event.preventDefault(); - const username = document.querySelector("#authUsername").value.trim(); - const password = document.querySelector("#authPassword").value; - const errorElement = document.querySelector("#authError"); - if (state.authMode === "register" && password !== document.querySelector("#authPasswordConfirm").value) { - errorElement.textContent = "两次输入的密码不一致。"; - errorElement.hidden = false; - return; - } - const button = document.querySelector("#authSubmitButton"); - button.disabled = true; - try { - const session = await apiRequest(`/api/auth/${state.authMode}`, "POST", { username, password }); - document.querySelector("#authForm").reset(); - await applyAuthenticatedSession(session); - } catch (error) { - errorElement.textContent = error.message || "账号操作失败"; - errorElement.hidden = false; - } finally { - button.disabled = false; - } -} - -async function applyAuthenticatedSession(session) { - state.user = session.user; - state.csrfToken = session.csrf_token || ""; - setText("accountName", session.user?.username || "账号"); - const isAdmin = session.user?.role === "admin"; - updateAccountIdentityBadges(session.user?.membership || {}); - document.querySelector("#settingsButton").hidden = !isAdmin; - document.querySelector("#syncButton").hidden = !isAdmin; - document.querySelector("#reasonForm").hidden = !isAdmin; - document.querySelector("#sectorPhaseManager").hidden = !isAdmin; - document.querySelector("#authGate").hidden = true; - applyMembershipAccess(); - await startAuthenticatedApp(); -} - -function showAuthGate(message = "") { - state.user = null; - state.csrfToken = ""; - const gate = document.querySelector("#authGate"); - gate.hidden = false; - const errorElement = document.querySelector("#authError"); - errorElement.textContent = message; - errorElement.hidden = !message; - document.querySelector("#authUsername").focus(); -} - -async function logoutAccount() { - toggleAccountDropdown(false); - try { - await apiRequest("/api/auth/logout", "POST", {}); - } catch (error) { - showToast(error.message || "退出失败"); - return; - } - window.location.reload(); -} - -function bindEvents() { - document.querySelectorAll("[data-auth-mode]").forEach((button) => { - button.addEventListener("click", () => selectAuthMode(button.dataset.authMode)); - }); - document.querySelector("#authForm").addEventListener("submit", submitAuthForm); - document.querySelector("#refreshButton").addEventListener("click", async (event) => { - const button = event.currentTarget; - button.disabled = true; - try { - await loadDashboard(false, false, false); - } finally { - button.disabled = false; - } - }); - document.querySelector("#syncButton").addEventListener("click", startAdminRefresh); - elements.tradeDate.addEventListener("change", () => { - state.dashboardRequestSequence += 1; - state.heavenRequestSequence += 1; - state.heavenManualData = null; - document.querySelector("#qiObservationDate").value = elements.tradeDate.value; - loadDashboard(); - }); - document.querySelector("#prevDate").addEventListener("click", () => shiftDate(-1)); - document.querySelector("#nextDate").addEventListener("click", () => shiftDate(1)); - document.querySelector("#stockSearch").addEventListener("input", (event) => { - state.query = event.target.value.trim().toLowerCase(); - renderLimitTable(); - }); - document.querySelectorAll("[data-table-search]").forEach((input) => { - input.addEventListener("input", () => { - const query = input.value.trim().toLowerCase(); - const body = document.querySelector(`#${CSS.escape(input.dataset.tableSearch)}`); - body?.querySelectorAll("tr").forEach((row) => { - row.hidden = Boolean(query) && !row.textContent.toLowerCase().includes(query); - }); - }); - }); - - document.querySelectorAll("[data-filter]").forEach((button) => { - button.addEventListener("click", () => { - document.querySelectorAll("[data-filter]").forEach((item) => item.classList.remove("active")); - button.classList.add("active"); - state.filter = button.dataset.filter; - renderLimitTable(); - }); - }); - - document.querySelector("#globalSearchButton").addEventListener("click", openGlobalSearch); - document.querySelector("#themeToggle").addEventListener("click", toggleTheme); - document.querySelector("#alertButton").addEventListener("click", openAlerts); - document.querySelector("#assistantButton").addEventListener("click", openReviewAssistant); - document.querySelector("#closeAssistantDialog").addEventListener("click", () => elements.assistantDialog.close()); - document.querySelector("#assistantForm").addEventListener("submit", sendAssistantQuestion); - document.querySelector("#stopAssistant").addEventListener("click", stopAssistantResponse); - document.querySelector("#clearAssistantMessages").addEventListener("click", clearAssistantConversation); - document.querySelectorAll("[data-assistant-prompt]").forEach((button) => { - button.addEventListener("click", () => useAssistantPrompt(button.dataset.assistantPrompt)); - }); - document.querySelector("#closeAlertsDialog").addEventListener("click", () => elements.alertsDialog.close()); - document.querySelector("#alertForm").addEventListener("submit", saveAlert); - document.querySelector("#markAllAlertsRead").addEventListener("click", markAllAlertsRead); - document.querySelector("#alertList").addEventListener("click", handleAlertAction); - document.querySelectorAll("[data-alert-filter]").forEach((button) => { - button.addEventListener("click", () => selectAlertFilter(button.dataset.alertFilter)); - }); - document.querySelector("#closeGlobalSearch").addEventListener("click", closeGlobalSearch); - document.querySelector("#closeEntityDetail").addEventListener("click", () => elements.entityDetailDialog.close()); - document.querySelectorAll("[data-entity-detail-chart]").forEach((button) => { - button.addEventListener("click", () => selectEntityDetailChart(button.dataset.entityDetailChart)); - }); - elements.globalSearchDialog.addEventListener("click", (event) => { - if (event.target === elements.globalSearchDialog) closeGlobalSearch(); - }); - elements.globalSearchInput.addEventListener("input", scheduleGlobalSearch); - elements.globalSearchInput.addEventListener("keydown", handleGlobalSearchInputKeydown); - elements.globalSearchResults.addEventListener("click", (event) => { - const result = event.target.closest("[data-search-result-index]"); - if (result) openGlobalSearchResult(number(result.dataset.searchResultIndex)); - }); - document.addEventListener("click", (event) => { - if (!event.target.closest(".account-menu-shell")) toggleAccountDropdown(false); - }); - window.addEventListener("keydown", handleGlobalSearchShortcut); - document.addEventListener("keydown", (event) => { - if (event.key === "Escape") { - toggleAccountDropdown(false, true); - toggleMentorDirectory(false); - } - handleAccountMenuKeydown(event); - }); - window.addEventListener("resize", () => { - if (window.innerWidth > 720) toggleMentorDirectory(false); - if (!elements.stockPreview.hidden) closeStockPreview(); - if (state.activeView === "dragonView") layoutDragonCards(); - }); - document.querySelectorAll("[data-open-account]").forEach((button) => { - button.addEventListener("click", () => openSettings("membership")); - }); - document.querySelectorAll("#limitTable th[data-sort]").forEach((header) => { - header.addEventListener("click", () => changeSort(header.dataset.sort)); - }); - document.querySelector("#brokenSearch").addEventListener("input", (event) => { - state.brokenQuery = event.target.value.trim().toLowerCase(); - renderBrokenTable(state.dashboard?.broken || []); - }); - document.querySelectorAll("#brokenTable th[data-broken-sort]").forEach((header) => { - header.addEventListener("click", () => changeBrokenSort(header.dataset.brokenSort)); - }); - document.querySelector("#downSearch").addEventListener("input", (event) => { - state.downQuery = event.target.value.trim().toLowerCase(); - renderDownTable(state.dashboard?.down_limits || []); - }); - document.querySelectorAll("#downTable th[data-down-sort]").forEach((header) => { - header.addEventListener("click", () => changeDownSort(header.dataset.downSort)); - }); - document.querySelector("#yesterdaySearch").addEventListener("input", (event) => { - state.yesterdayQuery = event.target.value.trim().toLowerCase(); - renderYesterdayTable(state.dashboard?.yesterday_limits || []); - }); - document.querySelectorAll("[data-yesterday-filter]").forEach((button) => { - button.addEventListener("click", () => { - state.yesterdayFilter = button.dataset.yesterdayFilter; - renderYesterdayTable(state.dashboard?.yesterday_limits || []); - }); - }); - document.querySelectorAll("#yesterdayTable th[data-yesterday-sort]").forEach((header) => { - header.addEventListener("click", () => changeYesterdaySort(header.dataset.yesterdaySort)); - }); - document.querySelectorAll("[data-ladder-sort]").forEach((button) => { - button.addEventListener("click", () => { - state.ladderSortMode = button.dataset.ladderSort === "open" ? "open" : "time"; - document.querySelectorAll("[data-ladder-sort]").forEach((item) => { - const active = item === button; - item.classList.toggle("active", active); - item.setAttribute("aria-pressed", String(active)); - }); - renderLadderBoard(state.dashboard?.ladders || []); - }); - }); - - document.querySelector("#exportButton").addEventListener("click", exportStocks); - document.querySelector("#brokenExportButton").addEventListener("click", exportBroken); - document.querySelector("#downExportButton").addEventListener("click", exportDown); - document.querySelector("#yesterdayExportButton").addEventListener("click", exportYesterday); - document.querySelector("#ladderExportButton").addEventListener("click", exportLadder); - document.querySelector("#rotationExportButton").addEventListener("click", exportRotation); - document.querySelectorAll("[data-rotation-order]").forEach((button) => { - button.addEventListener("click", () => { - state.rotationOrder = button.dataset.rotationOrder === "latest" ? "latest" : "oldest"; - localStorage.setItem("xiaobaiRotationOrder", state.rotationOrder); - renderRotationHistory(); - }); - }); - document.querySelector("#sentimentExportButton").addEventListener("click", exportSentimentHistory); - document.querySelectorAll("[data-sentiment-range]").forEach((button) => { - button.addEventListener("click", () => { - state.sentimentRange = number(button.dataset.sentimentRange) || 20; - document.querySelectorAll("[data-sentiment-range]").forEach((item) => { - item.classList.toggle("active", item === button); - }); - loadSentimentHistory(true); - }); - }); - document.querySelector("#settingsButton").addEventListener("click", () => openAdminSettings()); - document.querySelector("#accountButton").addEventListener("click", (event) => { - event.stopPropagation(); - toggleAccountDropdown(); - }); - document.querySelector("#accountVipBadge").addEventListener("click", () => openSettings("membership")); - document.querySelectorAll("[data-account-panel]").forEach((button) => { - button.addEventListener("click", () => openSettings(button.dataset.accountPanel)); - }); - document.querySelector("#switchAccountMenuButton").addEventListener("click", switchAccount); - document.querySelector("#logoutMenuButton").addEventListener("click", logoutAccount); - document.querySelector("#closeSettingsDialog").addEventListener("click", () => elements.settingsDialog.close()); - document.querySelector("#closeAdminDialog").addEventListener("click", () => elements.adminDialog.close()); - document.querySelector("#closeStockDialog").addEventListener("click", () => elements.stockDialog.close()); - document.querySelectorAll("[data-stock-detail-chart]").forEach((button) => { - button.addEventListener("click", () => selectStockDetailChart(button.dataset.stockDetailChart)); - }); - document.querySelector("#closeStockPreview").addEventListener("click", closeStockPreview); - elements.stockPreviewBackdrop.addEventListener("click", closeStockPreview); - document.querySelector("#openStockDetailFromPreview").addEventListener("click", openStockDetailFromPreview); - document.querySelectorAll("[data-preview-chart]").forEach((button) => { - button.addEventListener("click", () => selectStockPreviewChart(button.dataset.previewChart)); - }); - elements.stockPreview.addEventListener("pointerenter", cancelStockPreviewClose); - elements.stockPreview.addEventListener("pointerleave", scheduleStockPreviewClose); - document.addEventListener("pointerover", handleStockPreviewPointerOver); - document.addEventListener("pointerout", handleStockPreviewPointerOut); - document.addEventListener("focusin", handleStockPreviewFocus); - document.addEventListener("focusout", handleStockPreviewFocusOut); - document.addEventListener("click", handleMobileStockPreviewClick, true); - document.addEventListener("keydown", handleStockPreviewKeydown); - document.addEventListener("scroll", repositionStockPreview, true); - document.querySelector("#auctionRefreshButton").addEventListener("click", () => loadAuctionCenter(true)); - document.querySelector("#auctionExportButton").addEventListener("click", exportAuctionRows); - document.querySelector("#auctionSearch").addEventListener("input", (event) => { - state.auctionQuery = event.target.value.trim().toLocaleLowerCase("zh-CN"); - renderAuctionTable(); - }); - document.querySelectorAll("[data-auction-dataset]").forEach((button) => { - button.addEventListener("click", () => { - state.auctionDataset = button.dataset.auctionDataset || "focus"; - state.auctionFilter = "all"; - state.auctionSortKey = state.auctionDataset === "onePrice" ? "amount_million" : "attention_score"; - state.auctionSortDirection = "desc"; - document.querySelectorAll("[data-auction-dataset]").forEach((item) => { - const active = item === button; - item.classList.toggle("active", active); - item.setAttribute("aria-selected", String(active)); - }); - document.querySelectorAll("[data-auction-filter]").forEach((item) => item.classList.toggle("active", item.dataset.auctionFilter === "all")); - renderAuctionTable(); - }); - }); - document.querySelectorAll("[data-auction-filter]").forEach((button) => { - button.addEventListener("click", () => { - state.auctionFilter = button.dataset.auctionFilter || "all"; - document.querySelectorAll("[data-auction-filter]").forEach((item) => item.classList.toggle("active", item === button)); - renderAuctionTable(); - }); - }); - document.querySelector("#auctionTable").addEventListener("click", (event) => { - const header = event.target.closest("th[data-auction-sort]"); - if (!header) return; - const key = header.dataset.auctionSort; - if (state.auctionSortKey === key) state.auctionSortDirection = state.auctionSortDirection === "asc" ? "desc" : "asc"; - else { - state.auctionSortKey = key; - state.auctionSortDirection = "desc"; - } - renderAuctionTable(); - }); - document.querySelector("#openStrategyDrawerButton").addEventListener("click", openCustomStrategyDrawer); - document.querySelector("#closeStrategyDrawerButton").addEventListener("click", () => document.querySelector("#strategyDrawer").close()); - document.querySelector("#strategyDrawer").addEventListener("click", (event) => { - if (event.target === event.currentTarget) event.currentTarget.close(); - }); - document.querySelector("#themeRefreshButton").addEventListener("click", () => loadThemeLibrary(true)); - document.querySelector("#themeSearch").addEventListener("input", (event) => { - state.themeQuery = event.target.value.trim().toLocaleLowerCase("zh-CN"); - renderThemeDirectory(); - }); - document.querySelector("#themeDirectory").addEventListener("click", (event) => { - const button = event.target.closest("[data-theme-code]"); - if (button) selectTheme(button.dataset.themeCode); - }); - document.querySelector("#popularityRefreshButton").addEventListener("click", () => loadPopularity(true)); - document.querySelector("#popularitySearch").addEventListener("input", (event) => { - state.popularityQuery = event.target.value.trim().toLocaleLowerCase("zh-CN"); - renderPopularityTable(); - }); - document.querySelectorAll("[data-popularity-source]").forEach((button) => { - button.addEventListener("click", () => { - state.popularitySource = button.dataset.popularitySource || "combined"; - document.querySelectorAll("[data-popularity-source]").forEach((item) => { - const active = item === button; - item.classList.toggle("active", active); - item.setAttribute("aria-selected", String(active)); - }); - renderPopularityTable(); - }); - }); - document.querySelector("#dragonRefreshButton").addEventListener("click", () => { - if (state.dragonViewMode === "profiles") loadHotMoneyProfiles(true); - else loadDragonTiger(true); - }); - document.querySelector("#dragonEmptyRefreshButton").addEventListener("click", () => loadDragonTiger(true)); - document.querySelector("#dragonPreviousButton").addEventListener("click", () => shiftDate(-1)); - document.querySelector("#dragonExportButton").addEventListener("click", () => { - if (state.dragonViewMode === "profiles") exportHotMoneyProfiles(); - else exportDragonTiger(); - }); - document.querySelectorAll("[data-dragon-view-mode]").forEach((button) => { - button.addEventListener("click", () => selectDragonViewMode(button.dataset.dragonViewMode)); - }); - document.querySelector("#dragonSearch").addEventListener("input", (event) => { - state.dragonQuery = event.target.value.trim().toLowerCase(); - renderDragonTraderList(); - }); - document.querySelectorAll("[data-dragon-filter]").forEach((button) => { - button.addEventListener("click", () => { - state.dragonFilter = button.dataset.dragonFilter; - document.querySelectorAll("[data-dragon-filter]").forEach((item) => { - item.classList.toggle("active", item === button); - }); - renderDragonTraderList(); - }); - }); - document.querySelector("#hotMoneyProfileSearch").addEventListener("input", (event) => { - state.hotMoneyProfileQuery = event.target.value.trim().toLocaleLowerCase("zh-CN"); - renderHotMoneyProfiles(); - }); - document.querySelector("#hotMoneyProfileList").addEventListener("click", (event) => { - const button = event.target.closest("[data-hot-money-profile]"); - if (!button) return; - state.selectedHotMoneyProfileId = button.dataset.hotMoneyProfile; - renderHotMoneyProfiles(); - }); - document.querySelector("#journalForm").addEventListener("submit", saveJournal); - document.querySelector("#journalDate").addEventListener("change", populateJournalForm); - document.querySelector("#openWatchlistDialog").addEventListener("click", () => openWatchlistDialog()); - document.querySelector("#closeWatchlistDialog").addEventListener("click", closeWatchlistDialog); - document.querySelector("#cancelWatchlistEdit").addEventListener("click", closeWatchlistDialog); - document.querySelector("#changeWatchlistSelection").addEventListener("click", clearWatchlistSelection); - document.querySelector("#watchlistSearchInput").addEventListener("input", scheduleWatchlistSearch); - document.querySelector("#watchlistForm").addEventListener("submit", saveWatchlistFromDialog); - document.querySelector("#watchlistSearchResults").addEventListener("click", handleWatchlistSearchResult); - document.querySelector("#reviewHistoryToggle").addEventListener("click", (event) => { - const panel = document.querySelector("#reviewHistoryPanel"); - const expanded = event.currentTarget.getAttribute("aria-expanded") === "true"; - event.currentTarget.setAttribute("aria-expanded", String(!expanded)); - event.currentTarget.querySelector("span").textContent = expanded ? "历史复盘" : "收起历史"; - panel.hidden = expanded; - if (!expanded) panel.scrollIntoView({ behavior: "smooth", block: "nearest" }); - }); - document.querySelector("#openTradeLogDialog").addEventListener("click", openTradeLogDialog); - document.querySelector("#closeTradeLogDialog").addEventListener("click", closeTradeLogDialog); - document.querySelector("#tradeLogForm").addEventListener("submit", saveTradeLog); - document.querySelector("#cancelTradeEdit").addEventListener("click", closeTradeLogDialog); - elements.tradeLogDialog.addEventListener("close", resetTradeLogForm); - document.querySelector("#tradeLogTableBody").addEventListener("click", handleTradeLogAction); - document.querySelector("#stockNoteForm").addEventListener("submit", saveStockNote); - document.querySelector("#watchStockButton").addEventListener("click", toggleActiveWatchlist); - document.querySelector("#stockHeavenButton").addEventListener("click", openActiveStockInHeaven); - document.querySelector("#stockReminderButton").addEventListener("click", openStockReminder); - document.querySelector("#reasonForm").addEventListener("submit", saveReasonOverride); - document.querySelector("#backfillButton").addEventListener("click", backfillData); - document.querySelector("#openScreenerTrackingButton").addEventListener("click", async () => { - await loadScreenerTracking(true); - openView("screenerTrackingView"); - }); - document.querySelector("#closeScreenerTrackingButton").addEventListener("click", () => openView("screenerView")); - document.querySelector("#refreshTrackingButton").addEventListener("click", refreshScreenerTracking); - document.querySelector("#trackingTableBody").addEventListener("click", handleTrackingTableAction); - document.querySelectorAll("[data-screener-mobile-view]").forEach((button) => { - button.addEventListener("click", () => selectScreenerMobileView(button.dataset.screenerMobileView)); - }); - document.querySelector("#compileStrategyButton").addEventListener("click", compileStrategy); - document.querySelector("#saveStrategyButton").addEventListener("click", saveCurrentStrategy); - document.querySelector("#deleteStrategyButton").addEventListener("click", deleteCurrentStrategy); - document.querySelector("#screenerExportButton").addEventListener("click", exportScreenerResults); - document.querySelector("#runBacktestToggle").addEventListener("change", updateBacktestTaskStatus); - document.querySelectorAll("[data-screener-mode]").forEach((button) => { - button.addEventListener("click", () => selectScreenerMode(button.dataset.screenerMode)); - }); - document.querySelector("#curatedStrategyList").addEventListener("click", (event) => { - if (event.target.closest("button")) return; - const card = event.target.closest("[data-curated-strategy]"); - if (!card) return; - state.selectedCuratedStrategyId = number(card.dataset.curatedStrategy); - renderCuratedStrategyLibrary(); - renderScreenerResult(); - }); - document.querySelector("#curatedStrategySearch").addEventListener("input", (event) => { - state.curatedQuery = event.target.value.trim().toLocaleLowerCase("zh-CN"); - renderCuratedStrategyLibrary(); - }); - document.querySelector("#curatedCategoryFilter").addEventListener("change", (event) => { - state.curatedCategory = event.target.value; - renderCuratedStrategyLibrary(); - }); - document.querySelector("#curatedSchoolFilters").addEventListener("click", (event) => { - const button = event.target.closest("[data-curated-school]"); - if (!button) return; - state.curatedSchool = button.dataset.curatedSchool; - renderCuratedStrategyLibrary(); - }); - document.querySelectorAll("[data-curated-view]").forEach((button) => { - button.addEventListener("click", () => { - state.curatedViewMode = button.dataset.curatedView === "grid" ? "grid" : "list"; - localStorage.setItem("xiaobaiCuratedViewMode", state.curatedViewMode); - renderCuratedStrategyLibrary(); - }); - }); - document.querySelector("#quantResetButton").addEventListener("click", resetQuantBuilder); - document.querySelector("#addQuantFilterButton").addEventListener("click", () => addQuantFilter()); - document.querySelector("#addQuantScoreButton").addEventListener("click", () => addQuantScore()); - document.querySelector("#quantFilterRows").addEventListener("input", handleQuantBuilderInput); - document.querySelector("#quantFilterRows").addEventListener("change", handleQuantBuilderInput); - document.querySelector("#quantFilterRows").addEventListener("click", handleQuantBuilderClick); - document.querySelector("#quantScoreRows").addEventListener("input", handleQuantBuilderInput); - document.querySelector("#quantScoreRows").addEventListener("change", handleQuantBuilderInput); - document.querySelector("#quantScoreRows").addEventListener("click", handleQuantBuilderClick); - ["quantListedDays", "quantLimit", "quantMinScore", "quantExcludeSt"].forEach((id) => { - document.querySelector(`#${id}`).addEventListener("input", renderQuantSummary); - document.querySelector(`#${id}`).addEventListener("change", renderQuantSummary); - }); - document.querySelector("#quantRunButton").addEventListener("click", runQuantStrategy); - document.querySelector("#quantSaveButton").addEventListener("click", saveQuantAsStrategy); - document.querySelector("#quantBacktestToggle").addEventListener("change", updateBacktestTaskStatus); - document.querySelector("#mentorChatForm").addEventListener("submit", sendMentorQuestion); - document.querySelector("#clearMentorChatButton").addEventListener("click", clearMentorConversation); - document.querySelector("#mentorDirectoryToggle").addEventListener("click", () => { - toggleMentorDirectory(!state.mentorDirectoryOpen); - }); - document.querySelector("#closeMentorDirectory").addEventListener("click", () => toggleMentorDirectory(false)); - document.querySelector("#mentorDirectoryBackdrop").addEventListener("click", () => toggleMentorDirectory(false)); - document.querySelector("#mentorSortToggle").addEventListener("click", toggleMentorSortMode); - document.querySelector("#mentorSearchInput").addEventListener("input", (event) => { - state.mentorQuery = event.target.value.trim().toLocaleLowerCase("zh-CN"); - renderMentorDirectory(); - }); - document.querySelectorAll("[data-mentor-grade]").forEach((button) => { - button.addEventListener("click", () => { - state.mentorGrade = button.dataset.mentorGrade || "all"; - document.querySelectorAll("[data-mentor-grade]").forEach((item) => { - item.classList.toggle("active", item === button); - }); - renderMentorDirectory(); - }); - }); - document.querySelectorAll("[data-mentor-prompt]").forEach((button) => { - button.addEventListener("click", () => useMentorQuickPrompt(button.dataset.mentorPrompt)); - }); - document.querySelectorAll("[data-heaven-panel]").forEach((button) => { - button.addEventListener("click", () => selectHeavenPanel(button.dataset.heavenPanel, true)); - }); - document.querySelector("#loadHeavenSelectionButton").addEventListener("click", loadHeavenSelection); - document.querySelector("#heavenCalibrationForm").addEventListener("submit", applyHeavenCalibration); - document.querySelector("#resetHeavenCalibrationButton").addEventListener("click", resetHeavenCalibration); - document.querySelector("#heavenStockInput").addEventListener("keydown", (event) => { - if (event.key === "Enter") { - event.preventDefault(); - loadHeavenSelection(); - } - }); - document.querySelector("#interpretTrendButton").addEventListener("click", () => interpretHeaven("trend")); - document.querySelector("#interpretFortuneButton").addEventListener("click", () => interpretHeaven("fortune")); - document.querySelector("#historyTrendButton").addEventListener("click", () => openHeavenHistory("trend")); - document.querySelector("#historyFortuneButton").addEventListener("click", () => openHeavenHistory("fortune")); - document.querySelector("#qiObservationDate").addEventListener("change", () => { - state.personalField = null; - state.heavenManualData = null; - state.heavenInterpretations.fortune = ""; - loadHeavenSetup( - true, - "", - document.querySelector("#heavenStockInput").value.trim(), - ); - }); - document.querySelector("#openPersonalSettingsButton").addEventListener("click", () => openSettings("profile")); - document.querySelector("#accountBirthForm").addEventListener("submit", saveAccountBirthProfile); - document.querySelector("#deleteBirthProfileButton").addEventListener("click", deleteAccountBirthProfile); - document.querySelector("#passwordForm").addEventListener("submit", changeAccountPassword); - document.querySelector("#sectorPhaseForm").addEventListener("submit", saveSectorPhaseOverride); - document.querySelector("#startBreathingButton").addEventListener("click", startHeartBreathing); - document.querySelector("#beginCastingButton").addEventListener("click", beginHeartCasting); - document.querySelector("#heartSoundToggle").addEventListener("click", toggleHeartSound); - document.querySelector("#historyHeartButton").addEventListener("click", () => openHeavenHistory("heart")); - initializeHeartCoinHold(); - initializeHeartLineInspection(); - document.querySelector("#interpretHeartButton").addEventListener("click", () => interpretHeaven("heart")); - document.querySelector("#viewHeartReadingButton").addEventListener("click", () => openHeavenReading("heart")); - document.querySelector("#restartHeartButton").addEventListener("click", resetHeartRitual); - document.querySelector("#closeHeavenReadingDialog").addEventListener("click", () => elements.heavenReadingDialog.close()); - elements.heavenReadingDialog.addEventListener("close", stopHeavenReadingAnimation); - document.querySelectorAll("[data-heaven-reading-tab]").forEach((button) => { - button.addEventListener("click", () => selectHeavenReadingTab(button.dataset.heavenReadingTab)); - }); - document.querySelector("#heavenReadingHistoryList").addEventListener("click", handleHeavenHistorySelection); - document.querySelector("#heavenReadingHistoryDetail").addEventListener("click", handleHeavenHistoryAction); - document.querySelectorAll("[data-heart-return]").forEach((button) => { - button.addEventListener("click", resetHeartRitual); - }); - document.querySelector("#adminSectionSelect").addEventListener("change", (event) => selectAdminPanel(event.target.value)); - document.querySelector("#systemMarketForm").addEventListener("submit", saveMarketSettings); - document.querySelector("#systemModelsForm").addEventListener("submit", saveModelPool); - document.querySelector("#membershipSettingsForm").addEventListener("submit", saveMembershipSettings); - document.querySelector("#addPlatformModel").addEventListener("click", addPlatformModel); - document.querySelector("#adminRefreshButton").addEventListener("click", startAdminRefresh); - window.addEventListener("resize", redrawThemeSensitiveVisuals); - initializeAutoTableSorting(); -} - -async function loadDashboard(force = false, background = false, showOverlay = true) { - const requestedDate = elements.tradeDate.value; - if (state.dashboardLoading && state.dashboardRequestDate === requestedDate) return; - state.dashboardLoading = true; - state.dashboardRequestDate = requestedDate; - const requestSequence = ++state.dashboardRequestSequence; - if (force) stockPreviewCache.clear(); - if (!background && showOverlay) { - setLoading(true, "正在加载市场数据"); - setStatus("正在加载市场数据"); - } else if (!background) { - setStatus("正在刷新行情"); - } - try { - const query = new URLSearchParams({ trade_date: elements.tradeDate.value }); - if (force) query.set("force", "1"); - const payload = await apiRequest(`/api/dashboard?${query}`); - if ( - requestSequence !== state.dashboardRequestSequence - || requestedDate !== elements.tradeDate.value - ) return; - applyDashboard(payload, background); - } catch (error) { - if (background) { - setStatus("实时刷新暂时中断,正在等待重试"); - } else { - showToast(error.message || "无法连接本地服务"); - setStatus("加载失败"); - } - } finally { - if (requestSequence === state.dashboardRequestSequence) { - state.dashboardLoading = false; - state.dashboardRequestDate = ""; - if (!background && showOverlay) setLoading(false); - updateDateButtons(); - } - } -} - -async function startAdminRefresh() { - const buttons = [document.querySelector("#syncButton"), document.querySelector("#adminRefreshButton")].filter(Boolean); - buttons.forEach((button) => { button.disabled = true; }); - try { - const payload = await apiRequest("/api/admin/refresh", "POST", { trade_date: elements.tradeDate.value }); - showToast(payload.message || "后台刷新已提交"); - setStatus("后台刷新运行中,当前页面保持不变"); - } catch (error) { - showToast(error.message || "后台刷新启动失败"); - } finally { - buttons.forEach((button) => { button.disabled = false; }); - } -} - -function applyDashboard(payload, background = false) { - state.dashboard = payload; - const selectedDate = payload.meta.requested_date || payload.meta.trade_date; - elements.tradeDate.value = selectedDate; - document.querySelector("#qiObservationDate").value = selectedDate; - document.querySelector("#journalDate").value = selectedDate; - renderDashboard(); - setStatus(`${dashboardSourceLabel(payload.meta)} · 数据已更新`); - if (!background) { - if (state.activeView === "dragonView") loadDragonTiger(); - if (state.activeView === "screenerView") loadScreenerSetup(); - if (state.activeView === "screenerTrackingView") loadScreenerTracking(true); - if (state.activeView === "mentorView") loadMentorSetup(true); - if (state.activeView === "heavenView") loadHeavenSetup(true); - if (state.activeView === "sentimentCycleView") loadSentimentHistory(true); - if (state.activeView === "rotationView") loadRotationHistory(true); - if (state.activeView === "auctionView") loadAuctionCenter(true); - if (state.activeView === "themeLibraryView") loadThemeLibrary(true); - if (state.activeView === "popularityView") loadPopularity(true); - } - const requestedStock = new URLSearchParams(window.location.search).get("stock"); - if (!state.initialStockOpened && /^\d{6}$/.test(requestedStock || "")) { - state.initialStockOpened = true; - openStock(requestedStock); - } -} - -function dashboardSourceLabel(meta = {}) { - if (meta.realtime && !["closed", "after_hours"].includes(String(meta.market_status || ""))) return "盘中行情"; - if (meta.carried_forward) return "最近收盘行情"; - if (meta.market_status === "historical") return "历史行情"; - return "收盘行情"; -} - -function renderDashboard() { - const { meta, overview, ladders, sectors } = state.dashboard; - animateMetric("tapeUp", overview.up_count, (value) => Math.round(value)); - animateMetric("tapeDown", overview.down_count, (value) => Math.round(value)); - setText("tapeLimit", `${overview.limit_up_count} / 跌停 ${overview.limit_down_count}`); - animateMetric("tapeAmount", overview.amount_billion, (value) => `${formatNumber(value, 1)} 亿`); - animateMetric("limitUpMetric", overview.limit_up_count, (value) => `${Math.round(value)} 家`); - animateMetric("limitDownMetric", overview.limit_down_count, (value) => `${Math.round(value)} 家`); - animateMetric("brokenMetric", overview.broken_count, (value) => `${Math.round(value)} 家`); - animateMetric("sealRateMetric", overview.seal_rate, (value) => `${formatNumber(value, 1)}%`); - animateMetric("amountMetric", overview.amount_billion, (value) => `${formatNumber(value, 1)} 亿`); - setText("dataDateMetric", dashboardDataTimestamp(meta)); - animateMetric("sentimentScore", overview.sentiment_score, (value) => Math.round(value)); - setText("sentimentText", sentimentLabel(overview.sentiment_score)); - updateSentimentGauge(overview.sentiment_score); - setText("updatedAt", `${dashboardSourceLabel(meta)} · 更新 ${formatTimestamp(meta.updated_at)}`); - - renderLimitTable(); - renderLadderMini(ladders || []); - renderSectorMini(sectors || []); - renderBrokenTable(state.dashboard.broken || []); - renderDownTable(state.dashboard.down_limits || []); - renderYesterdayTable(state.dashboard.yesterday_limits || []); - renderPerformance(state.dashboard.limit_performance || []); - renderLadderBoard(ladders || []); - renderRotationMembers(); -} - -/* PRESERVATION-SOURCE-END app.js:1-1206 */ -/* PRESERVATION-SOURCE-BEGIN app.js:3471-3489 */ -async function backfillData() { - const button = document.querySelector("#backfillButton"); - button.disabled = true; - setLoading(true, "正在回补历史交易日"); - try { - const payload = await apiRequest("/api/backfill", "POST", { - start_date: document.querySelector("#backfillStart").value, - end_date: document.querySelector("#backfillEnd").value, - }); - showToast(`历史回补完成,共处理 ${payload.results.length} 个工作日`); - await openAdminSettings(true); - } catch (error) { - showToast(error.message); - } finally { - setLoading(false); - button.disabled = false; - } -} - -/* PRESERVATION-SOURCE-END app.js:3471-3489 */ -/* PRESERVATION-SOURCE-BEGIN app.js:8427-8904 */ -function hasMemberAccess() { - return state.user?.role === "admin" || Boolean(state.user?.membership?.active); -} - -function updateAccountIdentityBadges(membership = {}) { - const isAdmin = state.user?.role === "admin" || Boolean(membership.is_admin); - const subscribed = Boolean(membership.subscribed); - document.querySelector("#accountAdminBadge").hidden = !isAdmin; - const vipBadge = document.querySelector("#accountVipBadge"); - vipBadge.hidden = false; - vipBadge.classList.toggle("is-nonmember", !subscribed); - setText("accountVipLabel", subscribed ? "会员" : "非会员"); - vipBadge.title = subscribed ? "查看会员状态" : "查看会员权益"; -} - -function applyMembershipAccess() { - const unlocked = hasMemberAccess(); - document.querySelectorAll(".member-feature-view").forEach((view) => { - view.classList.toggle("member-locked", !unlocked); - const gate = view.querySelector(".member-gate"); - if (gate) gate.hidden = unlocked; - view.querySelectorAll("button, input, textarea, select").forEach((control) => { - if (control.closest(".member-gate") || control.hasAttribute("data-member-navigation")) return; - control.disabled = !unlocked; - }); - }); - const assistantButton = document.querySelector("#assistantButton"); - assistantButton.classList.toggle("member-locked-control", !unlocked); - assistantButton.title = unlocked ? "复盘助手" : "复盘助手(会员可用)"; - updateAssistantControls(); -} function openView(viewId, updateHash = true) { if (!applicationShell.page(viewId) || !pageModules.has(viewId)) return; @@ -1268,672 +72,22 @@ function openView(viewId, updateHash = true) { pageModules.afterMount(viewId, previousView); } -function initializeAutoTableSorting() { - markAutoSortableHeaders(document); - document.addEventListener("click", (event) => { - const header = event.target.closest?.("th[data-auto-sort]"); - if (!header || header.closest("#limitTable")) return; - const table = header.closest("table"); - const body = table?.tBodies?.[0]; - if (!body || body.rows.length < 2) return; - const direction = header.classList.contains("sort-asc") ? "desc" : "asc"; - table.querySelectorAll("th.sort-asc, th.sort-desc").forEach((item) => { - item.classList.remove("sort-asc", "sort-desc", "sorted"); - item.removeAttribute("aria-sort"); - const arrow = item.querySelector(".arr"); - if (arrow) arrow.textContent = "↕"; - }); - header.classList.add(`sort-${direction}`, "sorted"); - header.setAttribute("aria-sort", direction === "asc" ? "ascending" : "descending"); - const activeArrow = header.querySelector(".arr"); - if (activeArrow) activeArrow.textContent = direction === "asc" ? "▲" : "▼"; - const columnIndex = header.cellIndex; - const rows = [...body.rows].map((row, index) => ({ row, index })); - rows.sort((left, right) => { - const leftValue = autoSortValue(left.row.cells[columnIndex]); - const rightValue = autoSortValue(right.row.cells[columnIndex]); - let result; - if (leftValue.kind === "number" && rightValue.kind === "number") result = leftValue.value - rightValue.value; - else result = String(leftValue.value).localeCompare(String(rightValue.value), "zh-CN", { numeric: true, sensitivity: "base" }); - if (result === 0) result = left.index - right.index; - return direction === "asc" ? result : -result; - }); - rows.forEach(({ row }) => body.appendChild(row)); - const firstHeader = [...header.parentElement.cells][0]?.textContent.trim(); - if (["#", "排名"].includes(firstHeader)) { - [...body.rows].forEach((row, index) => { - if (row.cells[0]) row.cells[0].textContent = String(index + 1); - }); - } - }); + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", initialize, { once: true }); +} else { + initialize(); } -function markAutoSortableHeaders(root) { - root.querySelectorAll?.(".data-table:not(#limitTable) thead th").forEach((header) => { - if (header.closest("#brokenTable, #downTable, #yesterdayTable, #rotationTable")) return; - if (number(header.colSpan) > 1) return; - const label = header.textContent.trim(); - if (!label || ["#", "操作"].includes(label)) return; - header.dataset.autoSort = "true"; - header.classList.add("sortable"); - if (!header.querySelector(".arr")) header.insertAdjacentHTML("beforeend", ''); - header.title = `${label}:点击排序`; - }); -} -function autoSortValue(cell) { - const text = String(cell?.dataset?.sortValue || cell?.textContent || "").trim(); - if (!text || text === "--" || text.includes("样本不足")) return { kind: "text", value: "\uffff" }; - const boardMatch = text.match(/(\d+)\s*板/); - if (boardMatch) return { kind: "number", value: Number(boardMatch[1]) }; - const normalized = text.replaceAll(",", "").replace(/[+%]/g, ""); - const numericMatch = normalized.match(/^-?\d+(?:\.\d+)?/); - if (numericMatch) { - let value = Number(numericMatch[0]); - if (text.includes("亿")) value *= 10000; - return { kind: "number", value }; - } - return { kind: "text", value: text }; -} -function changeSort(key) { - if (state.sortKey === key) state.sortDirection = state.sortDirection === "asc" ? "desc" : "asc"; - else { - state.sortKey = key; - state.sortDirection = ["name", "code", "sector", "first_time", "last_time"].includes(key) ? "asc" : "desc"; - } - renderLimitTable(); -} -function compareRows(left, right) { - const leftValue = left[state.sortKey] ?? ""; - const rightValue = right[state.sortKey] ?? ""; - let result = typeof leftValue === "number" || typeof rightValue === "number" - ? number(leftValue) - number(rightValue) - : String(leftValue).localeCompare(String(rightValue), "zh-CN", { numeric: true }); - if (result === 0 && state.sortKey !== "first_time") result = String(left.first_time || "").localeCompare(String(right.first_time || "")); - return state.sortDirection === "asc" ? result : -result; +function bindEvents() { + bindDashboardEvents(); + bindSessionEvents(); + bindMarketEvents(); + bindThemeEvents(); + pageModules.bind(); + bindAdminEvents(); + bindSharedTableEvents(); } - -function updateSortHeaders() { - document.querySelectorAll("#limitTable th[data-sort]").forEach((header) => { - header.classList.remove("sort-asc", "sort-desc", "sorted"); - const active = header.dataset.sort === state.sortKey; - if (active) header.classList.add(state.sortDirection === "asc" ? "sort-asc" : "sort-desc", "sorted"); - const arrow = header.querySelector(".arr"); - if (arrow) arrow.textContent = active ? (state.sortDirection === "asc" ? "▲" : "▼") : "↕"; - }); -} - -function shiftDate(delta) { - const current = parseLocalDate(elements.tradeDate.value); - current.setDate(current.getDate() + delta); - const next = localDateString(current); - if (next > todayString()) return; - elements.tradeDate.value = next; - state.heavenManualData = null; - document.querySelector("#qiObservationDate").value = next; - loadDashboard(); -} - -function updateDateButtons() { - document.querySelector("#nextDate").disabled = elements.tradeDate.value >= todayString(); -} - -function selectAccountPanel(panel) { - const selected = ["profile", "membership", "password"].includes(panel) ? panel : "profile"; - const titles = { profile: "个人资料", membership: "会员状态", password: "修改密码" }; - setText("accountDialogTitle", titles[selected]); - document.querySelectorAll("[data-account-panel-content]").forEach((section) => { - section.hidden = section.dataset.accountPanelContent !== selected; - }); - document.querySelector("#connectionStatus").hidden = selected !== "membership"; - return selected; -} - -async function openSettings(panel = "profile") { - selectAccountPanel(panel); - toggleAccountDropdown(false); - toggleHeaderCommandMenu(false); - const status = document.querySelector("#connectionStatus"); - status.className = "connection-status"; - status.textContent = "正在读取账号状态"; - openModalDialog(elements.settingsDialog); - try { - const payload = await apiRequest("/api/account/status"); - const access = payload.llm_access || {}; - const membership = access.membership || {}; - if (state.user) { - state.user.membership = membership; - updateAccountIdentityBadges(membership); - applyMembershipAccess(); - } - status.textContent = membership.active ? "账户权益已同步" : "账户信息已同步"; - status.classList.toggle("connected", true); - setText("membershipBadge", membership.subscribed ? "会员有效" : membership.is_admin ? "管理员权限" : "普通用户"); - setText("membershipStateValue", membership.subscribed ? "已开通" : membership.is_admin ? "管理员可用" : "未开通"); - setText("membershipRemainingValue", membership.subscribed && membership.expires_at - ? `${number(membership.remaining_days)} 天` - : membership.is_admin || membership.subscribed ? "长期有效" : "--"); - setText("membershipDetail", membership.subscribed - ? `${membership.plan || "会员"}${membership.expires_at ? ` · 有效至 ${membershipDateDisplay(membership.expires_at, true)}` : " · 长期有效"}` - : membership.is_admin - ? "管理员拥有智能功能管理权限,但不会因此显示为已开通会员。" - : "开通会员后可使用智能选股、问师、问天、复盘助手等智能功能。"); - setText("membershipQuotaHint", `会员默认每日智能分析额度 ${number(access.daily_limit)} 次,由管理员统一设置。`); - setText("membershipUsage", membership.active - ? `今日已用 ${number(access.used_today)} 次` - : "今日智能分析:--"); - setText("membershipUsageSummary", membership.active ? `${number(access.used_today)} / ${number(access.daily_limit)}` : "--"); - setText("membershipRemainingUsage", membership.is_admin ? "不限" : membership.active ? `${number(access.remaining_calls)} 次` : "--"); - const birth = payload.birth_profile || {}; - if (birth.birth_datetime) { - const [birthDate, birthTime] = String(birth.birth_datetime).split("T"); - document.querySelector("#accountBirthDate").value = birthDate || ""; - document.querySelector("#accountBirthTime").value = (birthTime || "").slice(0, 5); - document.querySelector("#accountBirthGender").value = birth.gender || "unspecified"; - } - setText("birthProfileStatus", payload.birth_profile_configured ? "已加密保存" : "尚未设置"); - document.querySelector("#deleteBirthProfileButton").disabled = !payload.birth_profile_configured; - } catch (error) { - status.hidden = false; - status.textContent = "账户状态暂时无法同步"; - showToast(error.message || "账号信息加载失败"); - } -} - -async function changeAccountPassword(event) { - event.preventDefault(); - const form = event.currentTarget; - const button = form.querySelector("button[type='submit']"); - button.disabled = true; - try { - await apiRequest("/api/account/password", "POST", { - current_password: document.querySelector("#currentPassword").value, - new_password: document.querySelector("#newPassword").value, - confirm_password: document.querySelector("#confirmPassword").value, - }); - form.reset(); - showToast("密码已更新"); - } catch (error) { - showToast(error.message || "密码更新失败"); - } finally { - button.disabled = false; - } -} - -async function switchAccount() { - const button = document.querySelector("#switchAccountMenuButton"); - button.disabled = true; - toggleAccountDropdown(false); - try { - await apiRequest("/api/auth/logout", "POST", {}); - window.location.reload(); - } catch (error) { - showToast(error.message || "切换账号失败"); - button.disabled = false; - } -} - -async function openAdminSettings(refreshOnly = false) { - if (state.user?.role !== "admin") return; - if (!refreshOnly) openModalDialog(elements.adminDialog); - const status = document.querySelector("#adminConnectionStatus"); - status.textContent = "正在读取系统状态"; - try { - const payload = await apiRequest("/api/admin/settings"); - const data = payload.data || {}; - const ifind = data.ifind || {}; - const llm = payload.llm || {}; - const membership = payload.membership || {}; - status.textContent = `Tushare ${data.configured ? "已配置" : "未配置"} · iFinD ${ifind.configured ? "已配置" : "未配置"} · ${number(data.snapshot_dates)} 个交易日`; - status.classList.toggle("connected", Boolean(data.configured)); - setText("systemDataStatus", data.background_refresh_enabled ? "后台刷新已启用" : "后台刷新已暂停"); - document.querySelector("#systemTokenInput").value = ""; - document.querySelector("#systemIfindTokenInput").value = ""; - document.querySelector("#systemBackgroundRefresh").checked = Boolean(data.background_refresh_enabled); - document.querySelector("#memberDailyLimit").value = number(membership.member_daily_limit) || 50; - renderModelPool(llm.models || [], llm.primary_model_id || "", llm.fallback_model_id || ""); - renderAdminUsers(payload.users || []); - } catch (error) { - status.textContent = error.message || "系统配置读取失败"; - } -} - -function selectAdminPanel(panel) { - const selected = ["market", "models", "members"].includes(panel) ? panel : "market"; - document.querySelector("#adminSectionSelect").value = selected; - document.querySelectorAll("[data-admin-panel]").forEach((item) => { - item.hidden = item.dataset.adminPanel !== selected; - }); -} - -function renderModelPool(models, primaryId = "", fallbackId = "") { - state.adminModels = models.map((item) => ({ ...item, api_key: item.api_key || "" })); - const container = document.querySelector("#modelPoolList"); - container.innerHTML = state.adminModels.map((item, index) => ` -
    -
    ${escapeHtml(item.name || `模型 ${index + 1}`)}${item.configured ? "已保存密钥" : "待配置"}
    -
    - - - - -
    -
    未测试
    -
    - `).join("") || emptyStateHtml("模型池为空,请先添加模型"); - updateModelRoleOptions(primaryId, fallbackId); - container.querySelectorAll("[data-test-model]").forEach((button) => button.addEventListener("click", () => testPlatformModel(button.closest("[data-model-id]")))); - container.querySelectorAll("[data-delete-model]").forEach((button) => button.addEventListener("click", () => deletePlatformModel(button.closest("[data-model-id]")))); - container.querySelectorAll("[data-model-field='name']").forEach((input) => input.addEventListener("input", updateModelRoleLabels)); - refreshIcons(); -} - -function collectModelPool() { - const saved = new Map(state.adminModels.map((item) => [item.id, item])); - return [...document.querySelectorAll("#modelPoolList [data-model-id]")].map((row) => ({ - id: row.dataset.modelId, - name: row.querySelector("[data-model-field='name']").value.trim(), - base_url: row.querySelector("[data-model-field='base_url']").value.trim(), - model: row.querySelector("[data-model-field='model']").value.trim(), - api_key: row.querySelector("[data-model-field='api_key']").value.trim(), - configured: Boolean(saved.get(row.dataset.modelId)?.configured), - })); -} - -function updateModelRoleOptions(primaryId = document.querySelector("#platformPrimaryModelSelect").value, fallbackId = document.querySelector("#platformFallbackModelSelect").value) { - const models = collectModelPool(); - const options = models.map((item) => ``).join(""); - const primary = document.querySelector("#platformPrimaryModelSelect"); - const fallback = document.querySelector("#platformFallbackModelSelect"); - primary.innerHTML = models.length ? options : ''; - fallback.innerHTML = `${options}`; - primary.value = models.some((item) => item.id === primaryId) ? primaryId : models[0]?.id || ""; - fallback.value = models.some((item) => item.id === fallbackId) && fallbackId !== primary.value ? fallbackId : ""; -} - -function updateModelRoleLabels() { - updateModelRoleOptions(); -} - -function addPlatformModel() { - const models = collectModelPool(); - const id = `model-${Date.now()}-${Math.floor(Math.random() * 10000)}`; - models.push({ id, name: `模型 ${models.length + 1}`, base_url: "https://api.openai.com/v1", model: "", api_key: "", configured: false }); - renderModelPool(models, document.querySelector("#platformPrimaryModelSelect").value || id, document.querySelector("#platformFallbackModelSelect").value); - document.querySelector(`[data-model-id="${CSS.escape(id)}"] [data-model-field="name"]`)?.focus(); -} - -function deletePlatformModel(row) { - if (!row) return; - const id = row.dataset.modelId; - const primary = document.querySelector("#platformPrimaryModelSelect").value; - const fallback = document.querySelector("#platformFallbackModelSelect").value; - if (id === primary || id === fallback) { - showToast("请先为主模型或辅助模型选择其他模型,再删除当前模型"); - return; - } - const models = collectModelPool().filter((item) => item.id !== id); - renderModelPool(models, primary, fallback); -} - -function renderAdminUsers(users) { - const container = document.querySelector("#adminUsersList"); - container.innerHTML = users.map((user) => { - const admin = user.role === "admin"; - const member = Boolean(user.membership_subscribed); - const identityLabels = [admin ? "管理员" : "", member ? "会员有效" : "普通用户"].filter(Boolean).join(" · "); - const expiry = member - ? (user.membership_expires_at ? `有效至 ${membershipDateDisplay(user.membership_expires_at)}` : "永久有效") - : user.membership_status === "suspended" - ? "会员已停用" - : user.membership_status === "active" && user.membership_expires_at - ? `已于 ${membershipDateDisplay(user.membership_expires_at)} 到期` - : "尚未开通"; - return `
    -
    ${escapeHtml(user.username)}${escapeHtml(identityLabels)}${escapeHtml(expiry)}
    -
    今日调用 ${number(user.used_today)}
    -
    - - - -
    当前到期${escapeHtml(expiry)}
    - -
    -
    `; - }).join("") || emptyStateHtml("暂无注册用户"); - container.querySelectorAll(".membership-form").forEach((form) => form.addEventListener("submit", saveMembership)); -} - -async function saveMembership(event) { - event.preventDefault(); - const form = event.currentTarget; - const data = Object.fromEntries(new FormData(form).entries()); - const button = form.querySelector("button[type='submit']"); - button.disabled = true; - try { - const payload = await apiRequest("/api/admin/membership", "POST", data); - renderAdminUsers(payload.users || []); - showToast("会员状态已更新"); - } catch (error) { - showToast(error.message || "会员状态保存失败"); - } finally { - button.disabled = false; - } -} - -async function saveMarketSettings(event) { - event.preventDefault(); - const button = event.currentTarget.querySelector("button[type='submit']"); - button.disabled = true; - try { - await apiRequest("/api/admin/settings", "POST", { - tushare_token: document.querySelector("#systemTokenInput").value.trim(), - ifind_refresh_token: document.querySelector("#systemIfindTokenInput").value.trim(), - background_refresh_enabled: document.querySelector("#systemBackgroundRefresh").checked, - }); - document.querySelector("#systemTokenInput").value = ""; - document.querySelector("#systemIfindTokenInput").value = ""; - showToast("行情配置已保存"); - await openAdminSettings(true); - } catch (error) { - showToast(error.message || "系统配置保存失败"); - } finally { - button.disabled = false; - } -} - -async function saveModelPool(event) { - event.preventDefault(); - const button = event.currentTarget.querySelector("button[type='submit']"); - button.disabled = true; - try { - await apiRequest("/api/admin/settings", "POST", { - models: collectModelPool(), - primary_model_id: document.querySelector("#platformPrimaryModelSelect").value, - fallback_model_id: document.querySelector("#platformFallbackModelSelect").value, - }); - showToast("模型池已保存"); - await openAdminSettings(true); - } catch (error) { - showToast(error.message || "模型池保存失败"); - } finally { - button.disabled = false; - } -} - -async function saveMembershipSettings(event) { - event.preventDefault(); - const button = event.currentTarget.querySelector("button[type='submit']"); - button.disabled = true; - try { - await apiRequest("/api/admin/settings", "POST", { - member_daily_limit: number(document.querySelector("#memberDailyLimit").value), - }); - showToast("会员调用额度已保存"); - await openAdminSettings(true); - } catch (error) { - showToast(error.message || "会员调用额度保存失败"); - } finally { - button.disabled = false; - } -} - -async function testPlatformModel(row) { - if (!row) return; - const button = row.querySelector("[data-test-model]"); - const status = row.querySelector(".model-test-status"); - const profile = collectModelPool().find((item) => item.id === row.dataset.modelId) || {}; - button.disabled = true; - status.textContent = "连接中"; - try { - const payload = await apiRequest("/api/admin/settings/test", "POST", { model_id: row.dataset.modelId, profile }); - status.textContent = `已连通 · ${number(payload.result.latency_ms)} ms`; - status.className = "model-test-status success"; - } catch (error) { - status.textContent = error.message; - status.className = "model-test-status failure"; - } finally { - button.disabled = false; - } -} - -function membershipDateDisplay(value) { - if (!value) return ""; - const parsed = new Date(value); - if (Number.isNaN(parsed.getTime())) return String(value).slice(0, 10); - return new Intl.DateTimeFormat("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit" }).format(parsed); -} - -/* PRESERVATION-SOURCE-END app.js:8427-8904 */ -/* PRESERVATION-SOURCE-BEGIN app.js:9052-9283 */ -function trendClass(trend) { - return { "升温": "trend-hot", "降温": "trend-cool", "新进": "trend-new", "持平": "trend-flat" }[trend] || "trend-flat"; -} - -function changeClass(value) { - return number(value) > 0 ? "up" : number(value) < 0 ? "down" : ""; -} - -function sentimentLabel(score) { - const value = number(score); - if (value >= 80) return "情绪高涨"; - if (value >= 60) return "情绪偏强"; - if (value >= 40) return "情绪中性"; - if (value >= 20) return "情绪偏弱"; - return "情绪冰点"; -} - -function streakLabel(streak) { - const value = Math.max(1, number(streak)); - return value === 1 ? "首板" : `${value}板`; -} - -function signed(value) { - const parsed = number(value); - return `${parsed > 0 ? "+" : ""}${formatNumber(parsed, 2)}`; -} - -function dashboardDataTimestamp(meta = {}) { - const tradeDate = displayCompactDate(meta.trade_date); - if (tradeDate === "--") return "--"; - const intraday = tradeDate === todayString() && Boolean(meta.realtime) && !["closed", "after_hours"].includes(String(meta.market_status || "")); - if (intraday) { - const updated = new Date(meta.updated_at); - if (!Number.isNaN(updated.getTime())) { - const dateText = `${updated.getFullYear()}-${String(updated.getMonth() + 1).padStart(2, "0")}-${String(updated.getDate()).padStart(2, "0")}`; - const timeText = updated.toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit", hour12: false }); - return `${dateText} ${timeText}`; - } - } - return `${tradeDate} 15:00`; -} - -function formatMoneyMillion(value) { - const parsed = number(value); - const sign = parsed > 0 ? "+" : ""; - if (Math.abs(parsed) >= 100) return `${sign}${formatNumber(parsed / 100, 2)} 亿`; - return `${sign}${formatNumber(parsed * 100, 0)} 万`; -} - -async function apiRequest(url, method = "GET", body = null, requestOptions = {}) { - return window.XiaobaiAPI.request(url, method, body, requestOptions); -} - -function setLoading(loading, text = "正在加载复盘数据", context = "default") { - elements.loading.hidden = !loading; - elements.loading.dataset.context = loading ? context : "default"; - setText("loadingTitle", text); - setText( - "loadingHint", - context === "screener" - ? "正在完成因子筛选、候选排序与历史样本回测,这通常需要一点时间" - : "请稍候", - ); -} - -function setStatus(text) { - applicationShell.setStatus(text); -} - -let toastTimer; -function showToast(message) { - clearTimeout(toastTimer); - elements.toast.textContent = message; - elements.toast.hidden = false; - toastTimer = setTimeout(() => { elements.toast.hidden = true; }, 3600); -} - -function setText(id, value) { - const element = document.getElementById(id); - if (element) element.textContent = value; -} - -function motionEnabled() { - return !window.matchMedia("(prefers-reduced-motion: reduce)").matches; -} - -function refreshIcons() { - if (!window.lucide?.createIcons) return; - window.lucide.createIcons({ attrs: { "aria-hidden": "true" } }); -} - -function toggleHeaderCommandMenu(force) { - applicationShell.toggleHeaderCommandMenu(force); -} - -function toggleAccountDropdown(force, returnFocus = false) { - const menu = document.querySelector("#accountDropdown"); - const button = document.querySelector("#accountButton"); - if (!menu || !button) return; - const open = typeof force === "boolean" ? force : menu.hidden; - menu.hidden = !open; - button.setAttribute("aria-expanded", String(open)); - document.querySelector(".account-menu-shell")?.classList.toggle("is-open", open); - if (open) { - setText("accountMenuName", state.user?.username || "当前账号"); - const membership = state.user?.membership || {}; - setText("accountMenuRole", state.user?.role === "admin" ? (membership.subscribed ? "管理员 · 会员" : "管理员") : membership.subscribed ? "会员用户" : "普通用户"); - } else if (returnFocus) { - button.focus(); - } -} - -function handleAccountMenuKeydown(event) { - const menu = document.querySelector("#accountDropdown"); - if (!menu) return; - if (menu.hidden) { - if (document.activeElement?.id === "accountButton" && event.key === "ArrowDown") { - event.preventDefault(); - toggleAccountDropdown(true); - menu.querySelector('[role="menuitem"]')?.focus(); - } - return; - } - const items = [...menu.querySelectorAll('[role="menuitem"]:not(:disabled)')]; - if (!items.length) return; - const current = items.indexOf(document.activeElement); - if (event.key === "ArrowDown" || event.key === "ArrowUp") { - event.preventDefault(); - const offset = event.key === "ArrowDown" ? 1 : -1; - items[(current + offset + items.length) % items.length].focus(); - } else if (event.key === "Home" || event.key === "End") { - event.preventDefault(); - items[event.key === "Home" ? 0 : items.length - 1].focus(); - } -} - -function updateSentimentGauge(rawScore) { - const gauge = document.querySelector("#sentimentGauge"); - if (!gauge) return; - const score = clamp(rawScore, 0, 100); - const previous = Number(gauge.dataset.score); - gauge.dataset.score = String(score); - gauge.style.setProperty("--score", score); - if (!motionEnabled() || !Number.isFinite(previous) || Math.abs(previous - score) < 15) return; - gauge.classList.remove("sentiment-pulse"); - void gauge.offsetWidth; - gauge.classList.add("sentiment-pulse"); - gauge.addEventListener("animationend", () => gauge.classList.remove("sentiment-pulse"), { once: true }); -} - -function animateMetric(id, rawValue, formatter = (value) => value) { - const element = document.getElementById(id); - const target = Number(rawValue); - if (!element || !Number.isFinite(target)) { - setText(id, formatter(rawValue)); - return; - } - const storedValue = Number(element.dataset.metricValue); - const previous = Number.isFinite(storedValue) ? storedValue : 0; - element.dataset.metricValue = String(target); - const existingFrame = metricAnimationFrames.get(element); - if (existingFrame) cancelAnimationFrame(existingFrame); - if (!motionEnabled() || previous === target) { - element.textContent = formatter(target); - return; - } - element.classList.remove("metric-changed"); - void element.offsetWidth; - element.classList.add("metric-changed"); - const startedAt = performance.now(); - const duration = 560; - const update = (now) => { - const progress = Math.min(1, (now - startedAt) / duration); - const eased = 1 - (1 - progress) ** 3; - element.textContent = formatter(previous + (target - previous) * eased); - if (progress < 1) { - metricAnimationFrames.set(element, requestAnimationFrame(update)); - } else { - element.textContent = formatter(target); - metricAnimationFrames.delete(element); - setTimeout(() => element.classList.remove("metric-changed"), 80); - } - }; - metricAnimationFrames.set(element, requestAnimationFrame(update)); -} - -function animateRows(container) { - if (!container) return; - const rows = [...container.children].filter((item) => item.matches("tr, [data-code]")); - if (!motionEnabled()) { - rows.forEach((row) => row.classList.remove("row-pending", "row-enter")); - return; - } - const unseenRows = rows.filter((row) => row.dataset.motionSeen !== "1"); - unseenRows.slice(0, 12).forEach((row, index) => { - row.dataset.motionSeen = "1"; - row.classList.remove("row-pending", "row-enter"); - row.style.setProperty("--row-delay", `${index * 24}ms`); - requestAnimationFrame(() => row.classList.add("row-enter")); - row.addEventListener("animationend", () => row.classList.remove("row-enter"), { once: true }); - }); - if (!("IntersectionObserver" in window)) { - unseenRows.slice(12).forEach((row) => { row.dataset.motionSeen = "1"; }); - return; - } - if (!rowAnimationObserver) { - rowAnimationObserver = new IntersectionObserver((entries) => { - entries.forEach((entry) => { - if (!entry.isIntersecting) return; - const row = entry.target; - rowAnimationObserver.unobserve(row); - row.dataset.motionSeen = "1"; - row.classList.remove("row-pending"); - row.style.setProperty("--row-delay", "0ms"); - requestAnimationFrame(() => row.classList.add("row-enter")); - row.addEventListener("animationend", () => row.classList.remove("row-enter"), { once: true }); - }); - }, { threshold: 0.08, rootMargin: "0px 0px 40px 0px" }); - } - unseenRows.slice(12).forEach((row) => { - row.classList.add("row-pending"); - rowAnimationObserver.observe(row); - }); -} - -function waitForMotion(duration) { - return new Promise((resolve) => setTimeout(resolve, motionEnabled() ? duration : 0)); -} -/* PRESERVATION-SOURCE-END app.js:9052-9283 */ diff --git a/frontend/bootstrap.js b/frontend/bootstrap.js new file mode 100644 index 0000000..ab70307 --- /dev/null +++ b/frontend/bootstrap.js @@ -0,0 +1,39 @@ +const PAGE_REGISTRY_URL = "/pages.config.js?v=20260803-2"; + +function loadRuntimeScripts(sources) { + return Promise.all(sources.map((src) => new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = src; + script.async = false; + script.addEventListener("load", resolve, { once: true }); + script.addEventListener("error", () => reject(new Error(`无法加载运行脚本:${src}`)), { once: true }); + document.body.append(script); + }))); +} + +async function loadPageFragment(fragment) { + const response = await fetch(fragment.url, { credentials: "same-origin" }); + if (!response.ok) { + throw new Error(`无法加载页面片段:${fragment.url}(HTTP ${response.status})`); + } + return response.text(); +} + +async function bootstrap() { + await import(PAGE_REGISTRY_URL); + const registry = window.XiaobaiPages; + const mount = document.querySelector(".app-main"); + if (!registry || !mount) throw new Error("页面注册表或挂载点不存在"); + + const fragments = await Promise.all(registry.fragments.map(loadPageFragment)); + fragments.forEach((markup) => mount.insertAdjacentHTML("beforeend", markup)); + await loadRuntimeScripts(registry.runtimeScripts); + document.body.dataset.runtimeReady = "true"; +} + +bootstrap().catch((error) => { + document.body.dataset.bootstrapError = "true"; + const status = document.querySelector("#statusText"); + if (status) status.textContent = error?.message || "页面初始化失败"; + setTimeout(() => { throw error; }); +}); diff --git a/frontend/index.html b/frontend/index.html index 2996b1f..3449e83 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -18,12 +18,28 @@ })(); - - - - - - + + + + + + + + + + + + + + + + + + + + + +
    @@ -47,8 +63,8 @@
    -
    -
    +
    +
    上涨 -- 下跌 -- 涨停 -- @@ -90,9 +106,9 @@
    -

    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 M@W1=Py`SIzKdJP}-v9sr literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-08/heaven-trend-1080.png b/docs/migration/evidence/slice-08/heaven-trend-1080.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba600e61bb7b71bf6465408dce663a0897b13ba GIT binary patch literal 77780 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 EFU5i;H~;_u literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-09/README.md b/docs/migration/evidence/slice-09/README.md new file mode 100644 index 0000000..dfa3a95 --- /dev/null +++ b/docs/migration/evidence/slice-09/README.md @@ -0,0 +1,60 @@ +# 切片 09:我的复盘、自选、笔记、交易日志、提醒与复盘助手 + +> 基线:`b3df070`(切片 08) +> 回档标签:`xiaobai-preservation-slice-09-20260731` +> 结论:源码、API、数据库、账户隔离、真实页面及全量回归通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片只机械移动原版复盘、提醒和复盘助手实现,没有从`next/`取用代码,也没有修改自选、笔记、交易日志、提醒、会员灰化、LLM 上下文或流式协议。 + +| 原位置 | 新的唯一实现位置 | 兼容方式 | +|---|---|---| +| `assistant_agent.py` | `app/backend/features/review/agent.py` | 根级模块指向同一模块对象 | +| `DashboardService`提醒方法 | `app/backend/features/alerts/facade.py` | `AlertServiceMixin` | +| `DashboardService`复盘方法 | `app/backend/features/review/service.py` | `ReviewServiceMixin` | +| `ReviewDatabase`提醒方法 | `app/backend/features/alerts/repository.py` | `AlertRepositoryMixin` | +| `ReviewDatabase`复盘方法 | `app/backend/features/review/repository.py` | `ReviewRepositoryMixin` | +| 五个 POST/流式入口 | `app/backend/features/alerts/http.py`、`review/http.py` | HTTP Mixin | + +原版已经存在的`AlertService`、`TradeJournalService`、Repository Port 与 SQLite Adapter 继续保留为唯一底层实现。本切片没有制造第二套提醒或交易日志服务。 + +## 2. 源码等价与必要适配 + +- `assistant_agent.py`与正式 Agent 文件 SHA-256 一致,根级兼容模块与正式 Agent 是同一模块对象。 +- 5 个提醒编排方法、8 个复盘编排方法、6 个提醒 Repository 方法和 13 个复盘 Repository 方法均与原版无位置信息 AST 一致。 +- 五个 HTTP 方法只把全局`SERVICE`改为 Mixin 的`self.application_service`;状态码、字段、异常和流式事件写法不变。 +- `backend.features.alerts`和`backend.features.review`仅对旧底层服务采用延迟导出,避免`database -> feature package -> sqlite adapter -> database`初始化循环;外部`from ... import AlertService/TradeJournalService`接口不变。 +- 公共`RequestHandler._write_stream_event`继续保留,因为问师和复盘助手共同使用,且现有测试直接覆盖;统一传输层留到切片 10。 + +## 3. API 与数据库差分 + +- 原版`8790`和迁移版`8791`使用正式数据库的两个临时副本,未写正式数据库。 +- 固定日期下自选、全部复盘笔记、交易日志、提醒中心及复盘助手历史共 5 个鉴权接口,状态码与业务 JSON 完全一致。 +- 两版均为 62 个 schema 对象;`watchlist`、`review_notes`、`trade_entries`、`alerts`、`assistant_messages`、`users`、`system_settings`和`llm_usage`逐行一致。 +- 真实浏览器在迁移版临时副本中新增一条交易记录,弹窗正确关闭并显示短提示“交易记录已保存”;没有写正式数据库。 +- 未调用真实`/api/assistant/chat`,避免外部模型波动和 LLM 用量写入;Agent、流式累积与权限路径由源码等价和单元测试覆盖。 + +## 4. 真实浏览器检查 + +- 1920×1080 检查我的复盘完整布局,自选 6 只、交易日志、每日复盘三个独立输入框和最近复盘均可访问,无横向溢出。 +- 添加自选与交易日志弹窗居中可用;交易日志保存后没有出现超长空弹窗。 +- 提醒中心正常展示筛选、新建提醒和提醒记录。 +- 管理员会员账号显示完整可用的复盘助手;临时普通账号显示相同界面、顶部“复盘助手仅对会员开放”,下方快捷问题、输入框和发送按钮均灰化禁用。 +- 临时普通账号自选和交易日志均为空,证明用户私有数据没有串到管理员账号。 +- 夜间模式背景为`rgb(18, 20, 22)`,1920×1080 页面无横向溢出,控制台无错误。 +- 截图`review-workspace-night-1920x1080.png` SHA-256:`bc803305a391930a0aafd68062bab6de86eca14612799eebfda220cf2ad0798e`。 + +## 5. 自动验证与保留边界 + +| 验证 | 结果 | +|---|---:| +| 原版`python -m unittest discover -s tests -q` | 231 项通过 | +| 迁移版`python -m unittest discover -s tests -q` | 287 项通过 | +| `python -m unittest tests.test_preservation_slice_review_alerts -q` | 7 项通过 | +| `npx.cmd playwright test --reporter=dot` | 45 项通过(2.2 分钟) | +| `git diff --check` | 通过 | + +- 前端 DOM、页面 JS、CSS 与移动端行为未改动,统一归位延至切片 10。 +- `demo_data.py`、`static/heaven-loading.js`、五个疑似无引用前端函数和`wencai_saved_queries`继续保留到切片 11 试删。 +- 没有修改`next/`、正式数据库、Docker/NAS 或`8765`服务。 diff --git a/docs/migration/evidence/slice-09/api-diff.json b/docs/migration/evidence/slice-09/api-diff.json new file mode 100644 index 0000000..6b54980 --- /dev/null +++ b/docs/migration/evidence/slice-09/api-diff.json @@ -0,0 +1,60 @@ +{ + "all_equal": true, + "endpoints": [ + { + "name": "review watchlist", + "method": "GET", + "endpoint": "/api/watchlist?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "29c001cc6859312fd90082d0fb83818d263827e28ec21157b94c415b71c45078", + "migrated_sha256": "29c001cc6859312fd90082d0fb83818d263827e28ec21157b94c415b71c45078", + "equal": true, + "first_difference": null + }, + { + "name": "all review notes", + "method": "GET", + "endpoint": "/api/notes?scope=all", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "a2a1f08610d017de0e46080a1268f72b734eeb80f9cada311d7e03eb1416656a", + "migrated_sha256": "a2a1f08610d017de0e46080a1268f72b734eeb80f9cada311d7e03eb1416656a", + "equal": true, + "first_difference": null + }, + { + "name": "trade journal through fixed date", + "method": "GET", + "endpoint": "/api/trades?end_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "77287b34046e22748e94e61ead841e157f6b63f08de1b2fe61f5d715b2e989a4", + "migrated_sha256": "77287b34046e22748e94e61ead841e157f6b63f08de1b2fe61f5d715b2e989a4", + "equal": true, + "first_difference": null + }, + { + "name": "alert center through fixed date", + "method": "GET", + "endpoint": "/api/alerts?status=all&as_of=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "8807772f2b611ea8b95033aa19cae84f08b08e92d76fff8e3cd5b79966ea04f4", + "migrated_sha256": "8807772f2b611ea8b95033aa19cae84f08b08e92d76fff8e3cd5b79966ea04f4", + "equal": true, + "first_difference": null + }, + { + "name": "review assistant history", + "method": "GET", + "endpoint": "/api/assistant/messages", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "migrated_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "equal": true, + "first_difference": null + } + ] +} diff --git a/docs/migration/evidence/slice-09/api-requests.json b/docs/migration/evidence/slice-09/api-requests.json new file mode 100644 index 0000000..4bc736b --- /dev/null +++ b/docs/migration/evidence/slice-09/api-requests.json @@ -0,0 +1,32 @@ +[ + { + "name": "review watchlist", + "method": "GET", + "endpoint": "/api/watchlist?trade_date=2026-07-30", + "payload": null + }, + { + "name": "all review notes", + "method": "GET", + "endpoint": "/api/notes?scope=all", + "payload": null + }, + { + "name": "trade journal through fixed date", + "method": "GET", + "endpoint": "/api/trades?end_date=2026-07-30", + "payload": null + }, + { + "name": "alert center through fixed date", + "method": "GET", + "endpoint": "/api/alerts?status=all&as_of=2026-07-30", + "payload": null + }, + { + "name": "review assistant history", + "method": "GET", + "endpoint": "/api/assistant/messages", + "payload": null + } +] diff --git a/docs/migration/evidence/slice-09/database-diff.json b/docs/migration/evidence/slice-09/database-diff.json new file mode 100644 index 0000000..bc921c6 --- /dev/null +++ b/docs/migration/evidence/slice-09/database-diff.json @@ -0,0 +1,75 @@ +{ + "all_equal": true, + "schema": { + "object_count": 62, + "original_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "migrated_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "equal": true + }, + "tables": [ + { + "table": "watchlist", + "original_count": 6, + "migrated_count": 6, + "original_sha256": "070161f5cdcc33addf289f11cb0ae54bfc0d669a39426fc33398b64512dba2fe", + "migrated_sha256": "070161f5cdcc33addf289f11cb0ae54bfc0d669a39426fc33398b64512dba2fe", + "equal": true + }, + { + "table": "review_notes", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "86ed485c2ce922e3434f8ac742d38431ef430b5c22024cacb6f64f0e8e71ee98", + "migrated_sha256": "86ed485c2ce922e3434f8ac742d38431ef430b5c22024cacb6f64f0e8e71ee98", + "equal": true + }, + { + "table": "trade_entries", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true + }, + { + "table": "alerts", + "original_count": 2, + "migrated_count": 2, + "original_sha256": "37b46fb4a754cf9c6179b1be88eed7f5a5398ddfc87160f41ded622ffc313c88", + "migrated_sha256": "37b46fb4a754cf9c6179b1be88eed7f5a5398ddfc87160f41ded622ffc313c88", + "equal": true + }, + { + "table": "assistant_messages", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true + }, + { + "table": "users", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "migrated_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "equal": true + }, + { + "table": "system_settings", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "migrated_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "equal": true + }, + { + "table": "llm_usage", + "original_count": 72, + "migrated_count": 72, + "original_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "migrated_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "equal": true + } + ] +} diff --git a/docs/migration/evidence/slice-09/review-workspace-night-1920x1080.png b/docs/migration/evidence/slice-09/review-workspace-night-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f8acd560891e4420c1a1258c524e0b0362ac92 GIT binary patch literal 100490 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�!-OG1e@ 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 P;QwiYKlhETpL_m44#n0I literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/README.md b/docs/migration/evidence/slice-10/README.md new file mode 100644 index 0000000..38d60cc --- /dev/null +++ b/docs/migration/evidence/slice-10/README.md @@ -0,0 +1,70 @@ +# 切片 10:前端 Shell、页面、样式与移动端职责归位 + +> 基线:`38de3de`(切片 09) +> 回档标签:`xiaobai-preservation-slice-10-20260731` +> 结论:源码、静态资产、API、数据库、桌面/移动页面及动画差分通过;最终视觉仍等待全站人工验收 + +## 1. 原实现归位 + +本切片只移动和拆分原版前端源码,没有从`next/`取用代码,也没有重写页面、样式、动画、交互或响应式规则。 + +| 原位置 | 新位置 | 处理方式 | +|---|---|---| +| `static/index.html` | `app/frontend/index.html` | 原 DOM 骨架,仅调整静态资源路径和拆分脚本加载顺序 | +| `static/app.js` | `app/frontend/app.js`、`pages/*/page.js`、`pages/market/runtime.js`、`shared/export.js` | 按连续源码行机械拆分 | +| `static/styles.css`等公共样式 | `app/frontend/styles/` | 字节级移动 | +| `static/wentian-v2.css` | `app/frontend/pages/heaven/page.css` | 字节级移动 | +| `static/ui-core.js` | `app/frontend/shared/ui-core.js` | 字节级移动 | +| `static/heaven-loading-v2.js` | `app/frontend/pages/heaven/loading-v2.js` | 字节级移动 | +| `static/pages/`、`shared/`、`vendor/` | `app/frontend/`同职责目录 | 字节级移动 | + +`app/backend/bootstrap/config.py`现在只把静态根目录从`app/static/`切换到`app/frontend/`。原`app/static/`已不再存在,避免形成两套可被误改的前端实现。 + +## 2. 源码与静态资产等价 + +- 原`static/app.js`共 9,283 行,SHA-256 为`c020d0bc68f8a96b352a0ffa62c913a0ea3f5ca0afc41f70969f833e447166a6`。 +- 所有拆分文件中的保真源码片段按原行号重组后,SHA-256仍为同一值,9,283行无遗漏、无重排、无内容变化。 +- 七层原版样式、问天样式、加载动画、共享脚本、页面注册脚本及Lucide供应商文件在移动后保持字节一致。 +- `index.html`的差异仅限资源新路径和两个机械拆分脚本入口;反向替换后与原版逐字符一致。 +- 浏览器请求仍只有`shared/api.js`一个`fetch`出口。 +- 完整行号映射见`frontend-source-map.json`。该映射继续作为切片10的历史证据;一次性拆分工具在人工验收和当前所有者契约建立后已退役,不再进入维护工具链。 + +## 3. API 与数据库差分 + +- 同一管理员账号和同一固定日期下,对原版与迁移版执行21个全站只读请求。 +- 请求覆盖账号、行情、情绪、轮动、竞价、题材、人气、龙虎榜、选股、问师、问天、复盘与提醒;状态码和规范化业务JSON全部一致。 +- 两个数据库副本均包含62个schema对象,schema哈希一致。 +- 21张关键表的记录数、顺序和规范化内容逐行一致;`screener_strategies`仅排除每次初始化可能更新的`updated_at`。 +- 完整结果见`api-requests.json`、`api-diff.json`和`database-diff.json`,两份差分文件的`all_equal`均为`true`。 + +## 4. 真实浏览器差分 + +- 1920×1080日间模式检查情绪周期、智能选股、观势、观气、观心介绍及观心呼吸。 +- 1920×1080夜间模式检查情绪周期的背景、字体、表格、几何和横向溢出。 +- 390×844检查情绪周期与观势:移动Shell、底部五入口、页面纵向滚动、无横向溢出及问天特效均一致。 +- 观势星空节点90个、观气100个、观心110个;三页八卦节点均为2个。 +- 观势与观气保留`wt-tw`和`wt-spin`动画;观心呼吸保留`heart-incense-burn`、`heart-incense-glow`及动态波纹。 +- 观气五行行业为5组且默认折叠;观心介绍到呼吸流程可正常进入。 +- 原版和迁移版检查流程均未产生新增控制台error或warn。 +- 动画帧、焦点框和动态状态文字属于采样瞬时状态,因此截图文件哈希不要求相同;可见布局几何、计算样式、节点、动画名称和交互结果必须一致,本次均通过。 +- 两个服务使用相同主机名、不同端口时会共享并覆盖登录Cookie;曾导致迁移版切页被误判为失效。逐服务重新登录后行为一致,该问题属于并行验收环境限制,不是产品回归。 +- 2026-08-01像素复核发现`frontend-migrated-auction-light-1920x1080`实际截取了登录状态失效页, + 不能证明集合竞价视觉等价,文件已重命名为`INVALID-login-session`。集合竞价仍有切片05真实页面、 + 本切片源码/样式保真、API及Playwright证据,但最终视觉明确留待人工验收,不以替代证据冒充 + 本切片截图差分。 +- 机器可读记录见`browser-acceptance.json`,截图均保存在本目录。 + +## 5. 自动验证与保留边界 + +| 验证 | 结果 | +|---|---:| +| 前端专项测试 | 85项通过 | +| 原版`python -m unittest discover -s tests -q` | 231项通过 | +| 迁移版`python -m unittest discover -s tests -q` | 294项通过 | +| `npx.cmd playwright test --reporter=dot` | 45项通过(2.3分钟) | +| 全部拆分后JavaScript执行`node --check` | 通过 | +| `git diff --check` | 通过 | + +- `demo_data.py`、`frontend/heaven-loading.js`、五个疑似无引用前端函数和`wencai_saved_queries`继续保留到切片11逐项审计。 +- 没有修改`next/`、正式数据库、Docker/NAS或`8765`服务。 +- 自动差分只能证明已检查范围一致;依据迁移总纲,未经用户最终人工确认不得宣称全站视觉已经完全等价。 diff --git a/docs/migration/evidence/slice-10/api-diff.json b/docs/migration/evidence/slice-10/api-diff.json new file mode 100644 index 0000000..aee58c5 --- /dev/null +++ b/docs/migration/evidence/slice-10/api-diff.json @@ -0,0 +1,236 @@ +{ + "all_equal": true, + "endpoints": [ + { + "name": "当前账号", + "method": "GET", + "endpoint": "/api/auth/me", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "33e0c08463d5f14a142840f894d92985135c6ce2bee22c93c4dde34dc433cf5b", + "migrated_sha256": "33e0c08463d5f14a142840f894d92985135c6ce2bee22c93c4dde34dc433cf5b", + "equal": true, + "first_difference": null + }, + { + "name": "账号状态", + "method": "GET", + "endpoint": "/api/account/status", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "a1f81967a58dae0947191fe1a7465c87e70403339e36897329de94c541272e05", + "migrated_sha256": "a1f81967a58dae0947191fe1a7465c87e70403339e36897329de94c541272e05", + "equal": true, + "first_difference": null + }, + { + "name": "全市场总览", + "method": "GET", + "endpoint": "/api/dashboard?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "565730fb75cec6f6758321074dfeba7bff19db6611476d511f9bc7257a5870f5", + "migrated_sha256": "565730fb75cec6f6758321074dfeba7bff19db6611476d511f9bc7257a5870f5", + "equal": true, + "first_difference": null + }, + { + "name": "情绪周期历史", + "method": "GET", + "endpoint": "/api/sentiment/history?trade_date=2026-07-30&limit=9", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "1a577fb859a2fd06749169e1d0f08f78b51c5217b55506c7903487a956b6192b", + "migrated_sha256": "1a577fb859a2fd06749169e1d0f08f78b51c5217b55506c7903487a956b6192b", + "equal": true, + "first_difference": null + }, + { + "name": "板块轮动历史", + "method": "GET", + "endpoint": "/api/rotation/history?trade_date=2026-07-30&limit=9", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eaf3ac41f479c0f57f161546f197c1321721b4a8390486a916232fe6ea1d3d37", + "migrated_sha256": "eaf3ac41f479c0f57f161546f197c1321721b4a8390486a916232fe6ea1d3d37", + "equal": true, + "first_difference": null + }, + { + "name": "集合竞价", + "method": "GET", + "endpoint": "/api/auction?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "bd75b100485c0afa0cdddc73d1880160eea8c0b8c91f556245c665d591285ed6", + "migrated_sha256": "bd75b100485c0afa0cdddc73d1880160eea8c0b8c91f556245c665d591285ed6", + "equal": true, + "first_difference": null + }, + { + "name": "题材库", + "method": "GET", + "endpoint": "/api/themes?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "f45e218d9bff5191445fe45b03fc62f3d9c440b8353404ae4b54901c20929552", + "migrated_sha256": "f45e218d9bff5191445fe45b03fc62f3d9c440b8353404ae4b54901c20929552", + "equal": true, + "first_difference": null + }, + { + "name": "人气热榜", + "method": "GET", + "endpoint": "/api/popularity?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "69987a80f02ac02bf9ff49b3a0a99782385f1933c643c9e3dbb5a75a1e20dd29", + "migrated_sha256": "69987a80f02ac02bf9ff49b3a0a99782385f1933c643c9e3dbb5a75a1e20dd29", + "equal": true, + "first_difference": null + }, + { + "name": "龙虎榜", + "method": "GET", + "endpoint": "/api/dragon-tiger?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "173baf4e1f0b56678aef3f74276f29af49271ea34c89c0c18283bfe27f5cf2a6", + "migrated_sha256": "173baf4e1f0b56678aef3f74276f29af49271ea34c89c0c18283bfe27f5cf2a6", + "equal": true, + "first_difference": null + }, + { + "name": "游资档案", + "method": "GET", + "endpoint": "/api/dragon-tiger/profiles", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "dfb1e534c018ec12fd8d8ee0e7fe0f234e73dc7715d7f0a948f74ef8d12d779a", + "migrated_sha256": "dfb1e534c018ec12fd8d8ee0e7fe0f234e73dc7715d7f0a948f74ef8d12d779a", + "equal": true, + "first_difference": null + }, + { + "name": "智能选股工作区", + "method": "GET", + "endpoint": "/api/screener/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "e33a10e94accda4948c2af53887ea97736697f588ee1a92f561aa5c4bb28c2fd", + "migrated_sha256": "e33a10e94accda4948c2af53887ea97736697f588ee1a92f561aa5c4bb28c2fd", + "equal": true, + "first_difference": null + }, + { + "name": "策略持续跟踪", + "method": "GET", + "endpoint": "/api/screener/tracking?limit=12", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "f4476f53152b6a2ce01f2918da5999246cfd0ad7d0b71e80fdea8fa59c7456c2", + "migrated_sha256": "f4476f53152b6a2ce01f2918da5999246cfd0ad7d0b71e80fdea8fa59c7456c2", + "equal": true, + "first_difference": null + }, + { + "name": "问师模型库", + "method": "GET", + "endpoint": "/api/mentors/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "0ff7794fe45f49ab980221fa855b64c70d5c9b83c78ef86edc041e713490b626", + "migrated_sha256": "0ff7794fe45f49ab980221fa855b64c70d5c9b83c78ef86edc041e713490b626", + "equal": true, + "first_difference": null + }, + { + "name": "问师历史", + "method": "GET", + "endpoint": "/api/mentors/messages?mentor_id=kobe92-perspective&trade_date=20260730", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "migrated_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "equal": true, + "first_difference": null + }, + { + "name": "问天初始化", + "method": "GET", + "endpoint": "/api/heaven/setup?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "c814c2004c7dd672c397887725af000c150693a50900bb0ce1aa94599af1a3c8", + "migrated_sha256": "c814c2004c7dd672c397887725af000c150693a50900bb0ce1aa94599af1a3c8", + "equal": true, + "first_difference": null + }, + { + "name": "问天历史", + "method": "GET", + "endpoint": "/api/heaven/readings?mode=trend&limit=20", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "2aa83ea177bd5cb2351ac4f3a60fdcd17e02cfc14b5753e157e515f03fc2c6c1", + "migrated_sha256": "2aa83ea177bd5cb2351ac4f3a60fdcd17e02cfc14b5753e157e515f03fc2c6c1", + "equal": true, + "first_difference": null + }, + { + "name": "自选追踪", + "method": "GET", + "endpoint": "/api/watchlist?trade_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "29c001cc6859312fd90082d0fb83818d263827e28ec21157b94c415b71c45078", + "migrated_sha256": "29c001cc6859312fd90082d0fb83818d263827e28ec21157b94c415b71c45078", + "equal": true, + "first_difference": null + }, + { + "name": "全部复盘笔记", + "method": "GET", + "endpoint": "/api/notes?scope=all", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "a2a1f08610d017de0e46080a1268f72b734eeb80f9cada311d7e03eb1416656a", + "migrated_sha256": "a2a1f08610d017de0e46080a1268f72b734eeb80f9cada311d7e03eb1416656a", + "equal": true, + "first_difference": null + }, + { + "name": "交易日志", + "method": "GET", + "endpoint": "/api/trades?end_date=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "77287b34046e22748e94e61ead841e157f6b63f08de1b2fe61f5d715b2e989a4", + "migrated_sha256": "77287b34046e22748e94e61ead841e157f6b63f08de1b2fe61f5d715b2e989a4", + "equal": true, + "first_difference": null + }, + { + "name": "提醒中心", + "method": "GET", + "endpoint": "/api/alerts?status=all&as_of=2026-07-30", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "495a1f83ed661913807899e0955ef1b89193c30bc9a5be0587f7f03d60411d95", + "migrated_sha256": "495a1f83ed661913807899e0955ef1b89193c30bc9a5be0587f7f03d60411d95", + "equal": true, + "first_difference": null + }, + { + "name": "复盘助手历史", + "method": "GET", + "endpoint": "/api/assistant/messages", + "original_status": 200, + "migrated_status": 200, + "original_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "migrated_sha256": "eef46741adfc3a9f76294d3b78f37a45f113092ac9d44ee77c7a038a88ff09a1", + "equal": true, + "first_difference": null + } + ] +} diff --git a/docs/migration/evidence/slice-10/api-requests.json b/docs/migration/evidence/slice-10/api-requests.json new file mode 100644 index 0000000..dcf28c1 --- /dev/null +++ b/docs/migration/evidence/slice-10/api-requests.json @@ -0,0 +1,29 @@ +[ + {"name": "当前账号", "method": "GET", "endpoint": "/api/auth/me", "exclude_paths": ["$.csrf_token"]}, + {"name": "账号状态", "method": "GET", "endpoint": "/api/account/status"}, + {"name": "全市场总览", "method": "GET", "endpoint": "/api/dashboard?trade_date=2026-07-30"}, + {"name": "情绪周期历史", "method": "GET", "endpoint": "/api/sentiment/history?trade_date=2026-07-30&limit=9"}, + {"name": "板块轮动历史", "method": "GET", "endpoint": "/api/rotation/history?trade_date=2026-07-30&limit=9"}, + {"name": "集合竞价", "method": "GET", "endpoint": "/api/auction?trade_date=2026-07-30", "exclude_paths": ["$.meta.updated_at"]}, + {"name": "题材库", "method": "GET", "endpoint": "/api/themes?trade_date=2026-07-30"}, + {"name": "人气热榜", "method": "GET", "endpoint": "/api/popularity?trade_date=2026-07-30"}, + {"name": "龙虎榜", "method": "GET", "endpoint": "/api/dragon-tiger?trade_date=2026-07-30"}, + {"name": "游资档案", "method": "GET", "endpoint": "/api/dragon-tiger/profiles"}, + { + "name": "智能选股工作区", + "method": "GET", + "endpoint": "/api/screener/setup?trade_date=2026-07-30", + "sort_lists": {"$.strategies": "id"}, + "exclude_paths": ["$.strategies[].updated_at"] + }, + {"name": "策略持续跟踪", "method": "GET", "endpoint": "/api/screener/tracking?limit=12"}, + {"name": "问师模型库", "method": "GET", "endpoint": "/api/mentors/setup?trade_date=2026-07-30"}, + {"name": "问师历史", "method": "GET", "endpoint": "/api/mentors/messages?mentor_id=kobe92-perspective&trade_date=20260730"}, + {"name": "问天初始化", "method": "GET", "endpoint": "/api/heaven/setup?trade_date=2026-07-30"}, + {"name": "问天历史", "method": "GET", "endpoint": "/api/heaven/readings?mode=trend&limit=20"}, + {"name": "自选追踪", "method": "GET", "endpoint": "/api/watchlist?trade_date=2026-07-30"}, + {"name": "全部复盘笔记", "method": "GET", "endpoint": "/api/notes?scope=all"}, + {"name": "交易日志", "method": "GET", "endpoint": "/api/trades?end_date=2026-07-30"}, + {"name": "提醒中心", "method": "GET", "endpoint": "/api/alerts?status=all&as_of=2026-07-30"}, + {"name": "复盘助手历史", "method": "GET", "endpoint": "/api/assistant/messages"} +] diff --git a/docs/migration/evidence/slice-10/browser-acceptance.json b/docs/migration/evidence/slice-10/browser-acceptance.json new file mode 100644 index 0000000..bfc6a6c --- /dev/null +++ b/docs/migration/evidence/slice-10/browser-acceptance.json @@ -0,0 +1,101 @@ +{ + "schema_version": 1, + "tested_at": "2026-07-31T12:00:00+08:00", + "result": "passed_with_documented_evidence_gap", + "environments": { + "original": "temporary_original_runtime", + "migrated": "temporary_app_runtime", + "account": "administrator", + "database": "isolated_copies" + }, + "viewports": [ + { + "width": 1920, + "height": 1080, + "theme": "light", + "views": [ + "sentiment", + "screener", + "heaven_trend", + "heaven_fortune", + "heaven_heart_intro", + "heaven_heart_breath" + ], + "equal": true + }, + { + "width": 1920, + "height": 1080, + "theme": "dark", + "views": [ + "sentiment" + ], + "equal": true + }, + { + "width": 390, + "height": 844, + "theme": "light", + "views": [ + "sentiment", + "heaven_trend" + ], + "equal": true + } + ], + "invalid_captures": [ + { + "view": "auction", + "file": "frontend-migrated-auction-light-1920x1080.INVALID-login-session.png", + "reason": "The migrated capture shows an expired login session and is not visual-equivalence evidence.", + "replacement_claim": "No replacement screenshot claim; final visual acceptance remains manual." + } + ], + "heaven_animation_contract": { + "trend_star_nodes": 90, + "fortune_star_nodes": 100, + "heart_star_nodes": 110, + "bagua_nodes_per_view": 2, + "trend_and_fortune_animations": [ + "wt-tw", + "wt-spin" + ], + "heart_breath_animations": [ + "heart-incense-burn", + "heart-incense-glow" + ], + "fortune_industry_groups": 5, + "fortune_industries_collapsed_by_default": true, + "equal": true + }, + "mobile_contract": { + "primary_navigation_items": 5, + "horizontal_overflow": false, + "vertical_page_scroll": true, + "heaven_trend_geometry": { + "active": { + "height": 723, + "width": 374, + "x": 8, + "y": 50 + }, + "header": { + "width": 390, + "height": 50 + }, + "bottom_navigation": { + "width": 390, + "height": 58 + } + }, + "equal": true + }, + "console": { + "new_errors": 0, + "new_warnings": 0 + }, + "screenshot_policy": "Dynamic animation frames, focus outlines, and live status text may change pixel hashes. Acceptance compares visible geometry, computed styles, DOM state, animation names, interaction results, and overflow behavior.", + "known_test_environment_constraint": "Original and migrated services on the same hostname share cookies across ports. Each service must be logged in separately immediately before comparison.", + "all_equal": true, + "manual_acceptance_required": true +} diff --git a/docs/migration/evidence/slice-10/database-diff.json b/docs/migration/evidence/slice-10/database-diff.json new file mode 100644 index 0000000..e32d16a --- /dev/null +++ b/docs/migration/evidence/slice-10/database-diff.json @@ -0,0 +1,202 @@ +{ + "all_equal": true, + "schema": { + "object_count": 62, + "original_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "migrated_sha256": "60a4e044f0ddb6502e44b45f65bedc1a0a31d4bd596f386d4ccfe153a6c8ddd1", + "equal": true + }, + "tables": [ + { + "table": "users", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "migrated_sha256": "4a0f135bef8ebae454693d3f40e1157d84d814d18d849f33e2e760ed1d8a7f89", + "equal": true, + "excluded_columns": [] + }, + { + "table": "system_settings", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "migrated_sha256": "86d333a5c7feaf7111cd79b2db29513326a9b0d3781607f78bf633579e2ca8e9", + "equal": true, + "excluded_columns": [] + }, + { + "table": "watchlist", + "original_count": 6, + "migrated_count": 6, + "original_sha256": "070161f5cdcc33addf289f11cb0ae54bfc0d669a39426fc33398b64512dba2fe", + "migrated_sha256": "070161f5cdcc33addf289f11cb0ae54bfc0d669a39426fc33398b64512dba2fe", + "equal": true, + "excluded_columns": [] + }, + { + "table": "review_notes", + "original_count": 3, + "migrated_count": 3, + "original_sha256": "86ed485c2ce922e3434f8ac742d38431ef430b5c22024cacb6f64f0e8e71ee98", + "migrated_sha256": "86ed485c2ce922e3434f8ac742d38431ef430b5c22024cacb6f64f0e8e71ee98", + "equal": true, + "excluded_columns": [] + }, + { + "table": "trade_entries", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "alerts", + "original_count": 2, + "migrated_count": 2, + "original_sha256": "40b1ee5678b32f29ae356c1b30958e66138d34afd2aa6b8364fa02c23df66553", + "migrated_sha256": "40b1ee5678b32f29ae356c1b30958e66138d34afd2aa6b8364fa02c23df66553", + "equal": true, + "excluded_columns": [] + }, + { + "table": "assistant_messages", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "mentor_messages", + "original_count": 28, + "migrated_count": 28, + "original_sha256": "b906b776d575ff6fe459b2aa0e8b396267feed36d3d85f7edd7947b284482aeb", + "migrated_sha256": "b906b776d575ff6fe459b2aa0e8b396267feed36d3d85f7edd7947b284482aeb", + "equal": true, + "excluded_columns": [] + }, + { + "table": "mentor_preferences", + "original_count": 45, + "migrated_count": 45, + "original_sha256": "c19c7d05e6745e4f1787d1eed5f39d7e555ec24f8e490b585c19158edc2505ec", + "migrated_sha256": "c19c7d05e6745e4f1787d1eed5f39d7e555ec24f8e490b585c19158edc2505ec", + "equal": true, + "excluded_columns": [] + }, + { + "table": "heaven_readings", + "original_count": 31, + "migrated_count": 31, + "original_sha256": "e6cfc86f010fb182d7522bb99e5d268e826f93896035172120df51a011590951", + "migrated_sha256": "e6cfc86f010fb182d7522bb99e5d268e826f93896035172120df51a011590951", + "equal": true, + "excluded_columns": [] + }, + { + "table": "user_birth_profiles", + "original_count": 1, + "migrated_count": 1, + "original_sha256": "2a74d4b2edd3a730a46f17fb6ab3926575c42662c1d968643b0d54586ab68b13", + "migrated_sha256": "2a74d4b2edd3a730a46f17fb6ab3926575c42662c1d968643b0d54586ab68b13", + "equal": true, + "excluded_columns": [] + }, + { + "table": "sector_phase_overrides", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "screener_strategies", + "original_count": 36, + "migrated_count": 36, + "original_sha256": "872846dcb746446bda37723e63db737a2a0cf0540eb6a1da264012248887f4c5", + "migrated_sha256": "872846dcb746446bda37723e63db737a2a0cf0540eb6a1da264012248887f4c5", + "equal": true, + "excluded_columns": [ + "updated_at" + ] + }, + { + "table": "screener_runs", + "original_count": 250, + "migrated_count": 250, + "original_sha256": "9f58ff2f85e5b85878153f7694161620d77cb9b0f351754f2974a8a0cc8ad8fb", + "migrated_sha256": "9f58ff2f85e5b85878153f7694161620d77cb9b0f351754f2974a8a0cc8ad8fb", + "equal": true, + "excluded_columns": [] + }, + { + "table": "strategy_tracks", + "original_count": 16, + "migrated_count": 16, + "original_sha256": "f0639b1386b69c92fd815f929864b3b2457a6bf4ca515bee2dca87e9ea29e8c4", + "migrated_sha256": "f0639b1386b69c92fd815f929864b3b2457a6bf4ca515bee2dca87e9ea29e8c4", + "equal": true, + "excluded_columns": [] + }, + { + "table": "auction_factors", + "original_count": 511914, + "migrated_count": 511914, + "original_sha256": "3d0470787adaf7c4cf5f15f5ad9fa1d67c8fcd4807285ac264eeacdcf5054cd1", + "migrated_sha256": "3d0470787adaf7c4cf5f15f5ad9fa1d67c8fcd4807285ac264eeacdcf5054cd1", + "equal": true, + "excluded_columns": [] + }, + { + "table": "popularity_factors", + "original_count": 232, + "migrated_count": 232, + "original_sha256": "3f4c61a13ceaa1ed9ecb28f86241a8a478a6757d6a44b46f432f73c0226bba7f", + "migrated_sha256": "3f4c61a13ceaa1ed9ecb28f86241a8a478a6757d6a44b46f432f73c0226bba7f", + "equal": true, + "excluded_columns": [] + }, + { + "table": "seat_aliases", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "reason_overrides", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + }, + { + "table": "llm_usage", + "original_count": 72, + "migrated_count": 72, + "original_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "migrated_sha256": "03a070316a125cef904bbfb2bb06b06e792242d5713142e70354402c741393c3", + "equal": true, + "excluded_columns": [] + }, + { + "table": "wencai_saved_queries", + "original_count": 0, + "migrated_count": 0, + "original_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "migrated_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945", + "equal": true, + "excluded_columns": [] + } + ] +} diff --git a/docs/migration/evidence/slice-10/frontend-migrated-auction-light-1920x1080.INVALID-login-session.png b/docs/migration/evidence/slice-10/frontend-migrated-auction-light-1920x1080.INVALID-login-session.png new file mode 100644 index 0000000000000000000000000000000000000000..e35ebf724c0c16aae6bb8167f197271794cc1302 GIT binary patch literal 24303 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-migrated-dark-sentiment-1920x1080.png b/docs/migration/evidence/slice-10/frontend-migrated-dark-sentiment-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7e22fc1f4ccbf354cc4d4e9d32150c26592422 GIT binary patch literal 136137 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ØH_poJ(GqM>j05n@YHI&z?th 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⇥PQ6}R)awqFd0aVH`iULJc1lq{Wl(RVi#6&k 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 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-migrated-dark-sentiment-390x844.png b/docs/migration/evidence/slice-10/frontend-migrated-dark-sentiment-390x844.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c8a840e32563838bee84dd7259c6f2d3052afb GIT binary patch literal 35544 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 BD=h#3 literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-migrated-heaven-heart-breath-light-1920x1080.png b/docs/migration/evidence/slice-10/frontend-migrated-heaven-heart-breath-light-1920x1080.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8edb411f2b269fed09906ce3b195fb7009d549 GIT binary patch literal 71914 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 *1Igs9`h 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 H`n&%EGLJBn literal 0 HcmV?d00001 diff --git a/docs/migration/evidence/slice-10/frontend-migrated-heaven-trend-390x844.png b/docs/migration/evidence/slice-10/frontend-migrated-heaven-trend-390x844.png new file mode 100644 index 0000000000000000000000000000000000000000..81581d5d7417ecd3bb0d30127197c24ed837ff0f GIT binary patch literal 31554 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