#!/usr/bin/env python3 """Metadata audit of a fixed export, not a re-verification of live customer claims.""" import json,sys,hashlib from collections import Counter from pathlib import Path from urllib.parse import urlparse p=Path(sys.argv[1] if len(sys.argv)>1 else 'evidence-audit-input.json') raw=p.read_bytes();rows=json.loads(raw) result={'sha256':hashlib.sha256(raw).hexdigest(),'records':len(rows),'companies':len({r['domain'] for r in rows}),'duplicate_ids':len(rows)-len({r['id'] for r in rows}),'source_types':dict(sorted(Counter(r['sourceType'] for r in rows).items())),'missing_source_url':sum(not r.get('sourceUrl') for r in rows),'non_https_source_urls':sum(urlparse(r.get('sourceUrl','')).scheme!='https' for r in rows),'missing_scope':sum(not r.get('scope') for r in rows),'missing_observed_date':sum(not r.get('observedAt') for r in rows),'missing_publication_date':sum(not r.get('sourcePublishedAt') for r in rows),'missing_effective_date':sum(not r.get('sourceEffectiveAt') for r in rows),'missing_adoption_date':sum(not r.get('adoptionDate') for r in rows),'observed_date_range':[min(r['observedAt'] for r in rows),max(r['observedAt'] for r in rows)]} print(json.dumps(result,indent=2,sort_keys=True))