from central.app.deterministic_resolution import resolve_entry_scope, resolve_product_role, resolve_st_status def test_product_role_requires_two_independent_strong_signals(): assert resolve_product_role({"recipe": True, "production": True})["value"] == "OWN_PRODUCTION" assert resolve_product_role({"single_flag": True})["value"] is None def test_st_distinguishes_subject_from_withheld(): assert resolve_st_status({"official_cest": True, "purchase_retained": True})["value"] == "ST_ALREADY_WITHHELD_IN_PURCHASE" assert resolve_st_status({"official_cest": True, "purchase_retained": None})["status"] == "PENDING_ST_WITHHELD" def test_entry_scope_is_dynamic_when_both_ufs_are_observed(): assert resolve_entry_scope(["BA", "SP"], "BA")["value"] == "MIXED_OR_DYNAMIC" assert resolve_entry_scope(["BA"], "BA")["value"] == "INTRA"