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

REQUIRED = ("referent", "population", "unit", "comparator", "resolution", "evidence_ref")

def gate(pair):
    if not isinstance(pair, list) or len(pair) != 2:
        return {"decision":"REFUSE", "reason":"EXPECTED_PAIR"}
    a, b = pair
    for x in pair:
        if not isinstance(x, dict) or any(k not in x for k in REQUIRED):
            return {"decision":"REFUSE", "reason":"MISSING_FIELDS"}
    drift = []
    for k in ("referent", "population", "unit", "comparator", "resolution"):
        if a[k] != b[k]: drift.append({"field":k,"expected":a[k],"received":b[k]})
    if drift:
        return {"decision":"REFUSE", "reason":"IDENTITY_DRIFT", "drift":drift}
    return {"decision":"PASS", "reason":"COMPARABLE_ENVELOPES"}

def downstream(pair, result):
    if result["decision"] != "PASS":
        return {"downstream":"STOPPED"}
    return {"downstream":"PROCESSED", "population":pair[0]["population"]}

def main():
    pair=json.load(sys.stdin)
    result=gate(pair)
    out={**result, **downstream(pair, result)}
    print(json.dumps(out, sort_keys=True))
    return 0 if result["decision"] == "PASS" else 1
if __name__ == "__main__": sys.exit(main())
