REQUIRED=['match_case_id','opportunity_ref','eligibility_rule_ref','features','sensitive_attribute_policy','accommodation_path','model_version','score','rank','uncertainty_label','slice_definition','outcome_metric','error_metric','fairness_review_state','reason_code','reason_evidence_ref','human_review_state','provenance']
def inspect(x):
    e=[]
    for k in REQUIRED:
        if k not in x: e.append('MISSING:'+k)
    if not x.get('provenance'): e.append('PROVENANCE')
    if not x.get('uncertainty_label'): e.append('UNCERTAINTY')
    if x.get('eligibility_rule_ref')=='DERIVED_FROM_RANK_THRESHOLD': e.append('ELIGIBILITY_RANKING_COLLAPSE')
    feats=x.get('features',[])
    if any(not f.get('job_relevance_basis') for f in feats): e.append('JOB_RELEVANCE')
    if any(f.get('proxy_risk') in ('HIGH_UNRESOLVED','PROHIBITED') for f in feats): e.append('PROXY_RISK')
    if 'INFER_PROTECTED_TRAIT' in x.get('sensitive_attribute_policy',''): e.append('SENSITIVE_POLICY')
    if x.get('accommodation_requested') and (not x.get('accommodation_path') or x.get('missing_inaccessible_signal_penalized')): e.append('ACCOMMODATION')
    if x.get('material_slice_error_difference') and x.get('fairness_review_state') not in ('REVIEW_REQUIRED','HOLD','INVESTIGATE'): e.append('FAIRNESS_SLICE')
    if not x.get('reason_evidence_ref') or x.get('reason_code')=='MODEL_SAYS_LOWER_FIT': e.append('EXPLANATION')
    if x.get('autonomous_adverse_final') or x.get('human_review_state') in ('SKIPPED','AUTO_FINAL'): e.append('AUTONOMOUS_ADVERSE')
    return e
def expected(x):
    e=inspect(x)
    priority=[('AUTONOMOUS_ADVERSE','HOLD_AUTONOMOUS_ADVERSE_DECISION'),('SENSITIVE_POLICY','HOLD_SENSITIVE_ATTRIBUTE_POLICY'),('ACCOMMODATION','HOLD_ACCOMMODATION_PATH'),('JOB_RELEVANCE','HOLD_JOB_RELEVANCE_EVIDENCE'),('PROXY_RISK','HOLD_PROXY_RISK'),('FAIRNESS_SLICE','HOLD_FAIRNESS_SLICE_REVIEW'),('EXPLANATION','HOLD_EXPLANATION_EVIDENCE'),('UNCERTAINTY','HOLD_UNCERTAINTY'),('ELIGIBILITY_RANKING_COLLAPSE','HOLD_ELIGIBILITY_RANKING_BOUNDARY'),('PROVENANCE','HOLD_PROVENANCE')]
    for k,state in priority:
        if k in e: return state
    if any(z.startswith('MISSING:') for z in e): return 'HOLD_INSUFFICIENT_EVIDENCE'
    return 'HUMAN_REVIEW_REQUIRED'
def inspect_transfer(x):
    e=[]
    if x.get('context')!='LOW_STAKES_LEARNING_COMMUNITY': e.append('CONTEXT')
    if x.get('employment_threshold_reused') or x.get('employment_adverse_workflow_reused') or x.get('baseline_decision_label_used'): e.append('BASELINE_ORACLE_REUSE_FORBIDDEN')
    if not x.get('uncertainty_label') or not x.get('provenance'): e.append('TRANSFER_EVIDENCE')
    return e
def expected_transfer(x):
    e=inspect_transfer(x)
    if 'BASELINE_ORACLE_REUSE_FORBIDDEN' in e: return 'HOLD_BASELINE_ORACLE_REUSE'
    if e: return 'HOLD_INSUFFICIENT_EVIDENCE'
    return 'LOW_STAKES_REVIEW_REQUIRED'
