{
  "id": "publisher",
  "title": "Publisher (Affiliate)",
  "aliases": ["affiliate", "Affiliate", "publisher", "pub"],
  "description": "MNGT publisher account. In Admin schema this is primarily Affiliate + Affiliate_info (affiliate id is the publisher id).",
  "sourceSystem": "mngt",
  "schemaTables": ["Admin.Affiliate", "Admin.Affiliate_info", "Admin.publisher_account_status"],
  "tools": ["get_publisher", "get_publisher_caps", "get_publisher_agreement_status", "get_publisher_spaf_status", "list_publishers_onboarded"],
  "statusFields": [
    {
      "field": "Admin.Affiliate.status",
      "description": "Publisher operational status flag on the Affiliate row.",
      "values": [
        {
          "value": "unknown",
          "meaning": "Numeric codes exist in DB; exact map needs AdOps confirmation before treating as authoritative.",
          "confirmed": false
        }
      ],
      "notes": "Do not invent value meanings from row dumps. Confirm via MNGT UI / DBA."
    },
    {
      "field": "Admin.Affiliate_info.approved",
      "description": "Business approval gate — separate from agreement, SPAF, and payment eligibility.",
      "values": [
        {
          "value": "pending_or_unapproved",
          "meaning": "Not yet cleared for normal campaign eligibility (signup alone is not approval).",
          "confirmed": true,
          "notes": "Conceptual gate from Publisher Onboarding SOP; map to exact int codes with AdOps."
        },
        {
          "value": "approved",
          "meaning": "Business/contact review passed for the account; still requires agreement + SPAF + advertiser/product gates before launch.",
          "confirmed": true
        }
      ]
    },
    {
      "field": "Admin.Affiliate_info.suspended",
      "description": "Account suspension flag.",
      "values": [
        {
          "value": "0",
          "meaning": "Not suspended (confirm with AdOps).",
          "confirmed": false
        },
        {
          "value": "nonzero",
          "meaning": "Suspended / blocked from normal ops — do not treat as launch-ready.",
          "confirmed": true
        }
      ]
    },
    {
      "field": "Admin.Affiliate_info.disapproved",
      "description": "Disapproval flag — rejected prospect should not receive campaign eligibility.",
      "values": [
        {
          "value": "nonzero",
          "meaning": "Disapproved; do not grant platform/campaign access.",
          "confirmed": true
        }
      ]
    },
    {
      "field": "Admin.Affiliate_info.account_status",
      "description": "Account status label (varchar). May align with publisher_account_status.status_name.",
      "values": [
        {
          "value": "lookup:Admin.publisher_account_status",
          "meaning": "Resolve via publisher_account_status table (status_name / is_active) — do not hardcode from memory.",
          "confirmed": false
        }
      ]
    },
    {
      "field": "Admin.Affiliate.cap_status",
      "description": "Whether publisher-level caps are active / hit.",
      "values": [
        {
          "value": "unknown",
          "meaning": "Needs AdOps/DBA enum confirmation; see publisher_caps entity.",
          "confirmed": false
        }
      ]
    }
  ],
  "fieldAllowlist": [
    "Affiliate",
    "name",
    "company",
    "domain",
    "status",
    "approved",
    "suspended",
    "disapproved",
    "account_status",
    "account_state",
    "cap_status",
    "click_cap",
    "cap_count",
    "sales_rep",
    "account_manager",
    "account_secondary_manager",
    "account_sales_manager",
    "traffic_type",
    "traffic_geo",
    "traffic_channel",
    "campaign_eligibility",
    "sitename",
    "country",
    "state",
    "city",
    "timedate",
    "onboarded_at"
  ],
  "fieldDeny": [
    "pass_clr",
    "pass_hash",
    "reset_token",
    "reset_token_expiry",
    "reset_token_used",
    "SSN",
    "Tax_ID",
    "paypal_email",
    "paypal_status",
    "email",
    "telephone",
    "address1",
    "address2",
    "check_address",
    "slack_email",
    "pub_aws_access_key",
    "pub_aws_secret_key",
    "agreement"
  ],
  "reviewStatus": "draft",
  "refs": [
    "https://admedia-jira.atlassian.net/browse/TW-285",
    "https://admedia-jira.atlassian.net/browse/TW-309",
    "https://admedia-jira.atlassian.net/browse/TW-311",
    "https://admedia-jira.atlassian.net/browse/TW-331",
    "https://admedia-jira.atlassian.net/wiki/spaces/PM1/pages/758743051/Publisher+Onboarding+and+Launch+SOP"
  ],
  "notes": [
    "Publisher id in tools ≈ Affiliate / Affiliate_info.Affiliate.",
    "Allowlist is Phase-1 conservative; expand only after privacy/AdOps review.",
    "Numeric status codes marked confirmed:false until AdOps documents the map."
  ]
}
