- main_router: add run_automation_test that runs each site's download
flows in a cross sequence (expected/actual) plus a pass/fail report
with timings; expose it as menu [8]
- Site download functions now return False on their exception paths so
the test harness can record failures (baishi also flags config-read
failure)
- Replace overblown log/comment phrasing across all modules with plain
statements; trim docstrings
Co-Authored-By: Claude <noreply@anthropic.com>
- Add paths.py: BASE_DIR/DOWNLOAD_DIR/CONFIG_PATH anchored on __file__
so paths resolve regardless of the launch cwd
- Route main_router and all site modules through DOWNLOAD_DIR/CONFIG_PATH,
replacing os.getcwd()-based download dirs and the "config.yaml" literal
- main_router compare engine: read Excel as str with keep_default_na,
strip/normalize 运单号, drop blanks, and isin against a set so
int/float-vs-str mismatches no longer produce false "undelivered"
- Shunxin: give downloaded files unique microsecond temp names and read
Excel as str to preserve long-waybill precision
- Normalize bare except: to except Exception: across affected files
Co-Authored-By: Claude <noreply@anthropic.com>
- Scope the 扫描综合查询 click to .nav-level2-wrapper to avoid collision with the right-side tab of the same name
- Warn when config.yaml has no baishi.password before attempting export
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace Baishi placeholders with full download flow (scan-rate query, export modal, password auth via config.yaml)
- Reorganize router menu into 顺心 / 百世 modules; move undelivered-data compare into 顺心 flow
- Add config.example.yaml and ignore config.yaml to keep credentials out of VCS
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Introduce main_router.py as multi-site controller with interactive menu
- Extract 顺心 site logic into site_shunxin.py (expected & actual download)
- Add site_baishi.py stub for upcoming 百世 integration
- Add global 应到未到 data reconciliation via Left Anti-Join on 运单号
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>