def evaluate(c):
    required=['talent_id', 'capability_id', 'claim_type', 'evidence_id', 'evidence_type', 'issuer_or_reviewer', 'verification_method', 'observed_context', 'observed_level', 'evidence_date', 'freshness_state', 'assignment_relevance', 'conflict_state', 'evidence_ref']
    complete=all(str(c.get(k,'')).strip() for k in required)
    claimed_only=c.get('claim_type')=='SELF_CLAIM' and not c.get('independent_evidence',False)
    issuer_ok=bool(str(c.get('issuer_or_reviewer','')).strip())
    verified_ok=bool(str(c.get('verification_method','')).strip()) and str(c.get('verification_method'))!='NONE'
    relevant=c.get('assignment_relevance') not in {'NOT_RELEVANT','UNKNOWN',''}
    stale=c.get('freshness_state')=='STALE'
    conflict=c.get('conflict_state') not in {'NONE','RESOLVED',''}
    hidden_negative=bool(c.get('negative_evidence_hidden',False))
    if not complete or not issuer_ok: state='UNKNOWN'
    elif hidden_negative: state='BLOCKED'
    elif stale: state='STALE'
    elif conflict: state='DISPUTED'
    elif not relevant: state='PARTIAL'
    elif claimed_only or not verified_ok: state='PARTIAL'
    else: state='READY_FOR_HUMAN_DECISION'
    return {'state':state,'evidence_complete':complete,'issuer_ok':issuer_ok,'verification_ok':verified_ok,'assignment_relevant':relevant,'human_decision_allowed':state=='READY_FOR_HUMAN_DECISION'}
