60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""Check whether WBS-9.5 can be promoted from DATA_GATED to DONE."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
if str(ROOT) not in sys.path:
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
from tools.build_sector_flow_history_progress_v1 import DEFAULT_JSON, FORMULA_ID, main as build_progress_main # type: ignore
|
|
|
|
|
|
def _load(path: Path) -> dict:
|
|
if not path.exists():
|
|
return {}
|
|
try:
|
|
payload = json.loads(path.read_text(encoding="utf-8"))
|
|
return payload if isinstance(payload, dict) else {}
|
|
except Exception:
|
|
return {}
|
|
|
|
|
|
def main() -> int:
|
|
ap = argparse.ArgumentParser(description="Check WBS-9.5 readiness.")
|
|
ap.add_argument("--input", default=str(ROOT / "Temp" / "sector_flow_history_progress_v1.json"))
|
|
ap.add_argument("--json", action="store_true")
|
|
args = ap.parse_args()
|
|
|
|
input_path = Path(args.input)
|
|
input_path = input_path if input_path.is_absolute() else ROOT / input_path
|
|
if not input_path.exists():
|
|
build_progress_main()
|
|
|
|
payload = _load(input_path)
|
|
current = int(payload.get("current_dates") or 0)
|
|
target = int(payload.get("target_dates") or 30)
|
|
ready = current >= target and payload.get("status") == "DONE"
|
|
|
|
result = {
|
|
"formula_id": "WBS_9_5_RELIABILITY_READY_V1",
|
|
"source": str(input_path),
|
|
"current_dates": current,
|
|
"target_dates": target,
|
|
"ready": ready,
|
|
"status": "DONE" if ready else "DATA_GATED",
|
|
"message": "WBS-9.5 can be promoted" if ready else "WBS-9.5 remains DATA_GATED",
|
|
}
|
|
|
|
print(json.dumps(result, ensure_ascii=False, indent=2) if args.json else f"{result['status']}: {result['message']} ({current}/{target})")
|
|
return 0 if ready else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|
|
|