#!/usr/bin/env python3
import json, sys

def validate(packet):
    required = ['work_line','beneficiary','current_state','next_step','referent','contract_version','due_at','evidence']
    errors=[]
    for k in required:
        if k not in packet or packet[k] in ('', None, []): errors.append(f'missing:{k}')
    if packet.get('referent',{}).get('mode') not in ('id','timestamp'):
        errors.append('invalid:referent.mode')
    if packet.get('contract_version') != packet.get('referent',{}).get('contract_version'):
        errors.append('mismatch:contract_version_vs_referent')
    if packet.get('evidence') and any(not isinstance(x,dict) or not x.get('at') or not x.get('source') for x in packet['evidence']):
        errors.append('invalid:evidence_receipt')
    return errors

for line in sys.stdin:
    p=json.loads(line); e=validate(p)
    print(json.dumps({'ok':not e,'errors':e},sort_keys=True))
    
