"""Only structural count/hash receipts can leave the private execution phase."""
def counts(value):
    if (set(value) != {'schema_version', 'lifecycle', 'outbox', 'submissions', 'integrity',
                       'read_only_pre_open', 'store_constructed'}
            or value['schema_version'] != 5 or value['integrity'] != 'ok'
            or value['read_only_pre_open'] is not True or value['store_constructed'] is not False
            or set(value['lifecycle']) != {'records', 'events', 'pending'}
            or not set(value['outbox']) <= {'pending', 'delivered', 'blocked'}
            or not set(value['submissions']) <= {'prepared', 'in_flight', 'confirmed', 'unresolved'}):
        raise ValueError('count-only receipt shape/state refused; values withheld')
    for group in ('lifecycle', 'outbox', 'submissions'):
        if any(type(number) is not int or number < 0 or number > 10**12
               for number in value[group].values()):
            raise ValueError('count-only receipt values refused')
    return value
