Add career VedAstro radar
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""VedAstro-assisted career timing radar.
|
||||
|
||||
External VedAstro signals are secondary evidence only. They do not change
|
||||
local scores, dominant labels, or final career/prashna adjudication by
|
||||
themselves.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import vedastro_service_adapter
|
||||
|
||||
|
||||
def build_career_radar_packet(case: dict[str, Any], *, start_date: str, end_date: str, case_id: str = "user_chart") -> dict[str, Any]:
|
||||
result = vedastro_service_adapter.run_range_scan_for_case(
|
||||
case,
|
||||
"career",
|
||||
start_date,
|
||||
end_date,
|
||||
case_id=case_id,
|
||||
)
|
||||
policy = result.get("adjudicator_policy") if isinstance(result.get("adjudicator_policy"), dict) else {}
|
||||
can_change_score = bool(policy.get("can_change_score", False))
|
||||
status = result.get("status", "blocked")
|
||||
return {
|
||||
"scope": "career_vedastro_radar",
|
||||
"status": "ok" if status == "ok" else "blocked",
|
||||
"blocked_reason": None if status == "ok" else result.get("reason") or status,
|
||||
"domain": "career",
|
||||
"adjudicator_use": "secondary_evidence_only",
|
||||
"can_change_score": can_change_score,
|
||||
"can_set_final_verdict": False,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"vedastro_range_scan_result": result,
|
||||
"technique_audit_row": {
|
||||
"technique": "VedAstro Career Range Scan",
|
||||
"used": status == "ok",
|
||||
"status": status,
|
||||
"role": "external_secondary_evidence",
|
||||
"confidence_effect": "raises_attention_only_not_final_score" if status == "ok" else "blocked_no_effect",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def _load_case(path: Path) -> dict[str, Any]:
|
||||
return json.loads(path.read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--case-json", type=Path, required=True)
|
||||
parser.add_argument("--start-date", required=True)
|
||||
parser.add_argument("--end-date", required=True)
|
||||
parser.add_argument("--case-id", default="user_chart")
|
||||
parser.add_argument("--output", type=Path)
|
||||
args = parser.parse_args()
|
||||
packet = build_career_radar_packet(
|
||||
_load_case(args.case_json),
|
||||
start_date=args.start_date,
|
||||
end_date=args.end_date,
|
||||
case_id=args.case_id,
|
||||
)
|
||||
text = json.dumps(packet, ensure_ascii=False, indent=2, sort_keys=True)
|
||||
if args.output:
|
||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||
args.output.write_text(text + "\n", encoding="utf-8")
|
||||
print(text)
|
||||
return 0 if packet["status"] == "ok" else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user