{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/broadridge/refs/heads/main/json-schema/broadridge-position-schema.json",
  "title": "Broadridge Position",
  "description": "JSON Schema for a Broadridge Wealth Management securities position (holding) in a brokerage account.",
  "type": "object",
  "required": ["positionId", "accountNumber", "symbol", "quantity"],
  "properties": {
    "positionId": {
      "type": "string",
      "description": "Unique position identifier"
    },
    "accountNumber": {
      "type": "string",
      "description": "Brokerage account number"
    },
    "cusip": {
      "type": "string",
      "description": "Committee on Uniform Securities Identification Procedures number",
      "pattern": "^[A-Z0-9]{9}$"
    },
    "symbol": {
      "type": "string",
      "description": "Ticker symbol"
    },
    "securityDescription": {
      "type": "string",
      "description": "Full security name/description"
    },
    "assetClass": {
      "type": "string",
      "enum": ["Equity", "FixedIncome", "MutualFund", "ETF", "Options", "Cash", "Alternative"]
    },
    "quantity": {
      "type": "number",
      "description": "Number of shares or units held"
    },
    "price": {
      "type": "number",
      "description": "Current price per share/unit",
      "minimum": 0
    },
    "marketValue": {
      "type": "number",
      "description": "Total market value (quantity * price)"
    },
    "costBasis": {
      "type": "number",
      "description": "Total cost basis for the position"
    },
    "unrealizedGainLoss": {
      "type": "number",
      "description": "Unrealized gain/loss (marketValue - costBasis)"
    },
    "unrealizedGainLossPct": {
      "type": "number",
      "description": "Unrealized gain/loss as percentage of cost basis"
    },
    "currency": {
      "type": "string",
      "default": "USD",
      "pattern": "^[A-Z]{3}$"
    },
    "asOfDate": {
      "type": "string",
      "format": "date",
      "description": "Date the position data is as-of"
    }
  }
}
