{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/OpportunityUpdate",
  "title": "OpportunityUpdate",
  "type": "object",
  "description": "Properties for updating an existing opportunity.",
  "properties": {
    "name": {
      "type": "string",
      "maxLength": 300,
      "description": "Subject or descriptive name (topic) for the opportunity."
    },
    "description": {
      "type": "string",
      "description": "Additional information to describe the opportunity."
    },
    "estimatedvalue": {
      "type": "number",
      "description": "Estimated revenue amount."
    },
    "closeprobability": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100,
      "description": "Likelihood of closing the opportunity."
    },
    "estimatedclosedate": {
      "type": "string",
      "format": "date",
      "description": "Expected closing date."
    },
    "stepname": {
      "type": "string",
      "maxLength": 200,
      "description": "Current phase in the sales pipeline."
    },
    "salesstage": {
      "type": "integer",
      "description": "Sales stage code."
    },
    "opportunityratingcode": {
      "type": "integer",
      "description": "Rating code."
    },
    "prioritycode": {
      "type": "integer",
      "description": "Priority code."
    },
    "budgetamount": {
      "type": "number",
      "description": "Budget amount."
    },
    "budgetstatus": {
      "type": "integer",
      "description": "Budget status code."
    },
    "purchaseprocess": {
      "type": "integer",
      "description": "Purchase process code."
    },
    "purchasetimeframe": {
      "type": "integer",
      "description": "Purchase timeframe code."
    },
    "timeline": {
      "type": "integer",
      "description": "Timeline code."
    },
    "customerneed": {
      "type": "string",
      "maxLength": 2000,
      "description": "Customer requirements."
    },
    "customerpainpoints": {
      "type": "string",
      "maxLength": 2000,
      "description": "Customer pain points."
    },
    "currentsituation": {
      "type": "string",
      "maxLength": 2000,
      "description": "Current situation notes."
    },
    "proposedsolution": {
      "type": "string",
      "maxLength": 2000,
      "description": "Proposed solution notes."
    },
    "decisionmaker": {
      "type": "boolean",
      "description": "Whether the contact is a decision maker."
    },
    "discountamount": {
      "type": "number",
      "description": "Discount amount."
    },
    "discountpercentage": {
      "type": "number",
      "minimum": 0,
      "maximum": 100,
      "description": "Discount rate percentage."
    },
    "freightamount": {
      "type": "number",
      "description": "Freight or shipping cost."
    },
    "totaltax": {
      "type": "number",
      "description": "Total tax amount."
    },
    "statecode": {
      "type": "integer",
      "description": "Status code."
    },
    "statuscode": {
      "type": "integer",
      "description": "Status reason code."
    },
    "customerid_account@odata.bind": {
      "type": "string",
      "description": "Bind reference to a customer account. Format: /accounts(GUID)."
    },
    "customerid_contact@odata.bind": {
      "type": "string",
      "description": "Bind reference to a customer contact. Format: /contacts(GUID)."
    },
    "parentaccountid@odata.bind": {
      "type": "string",
      "description": "Bind reference to a parent account. Format: /accounts(GUID)."
    },
    "parentcontactid@odata.bind": {
      "type": "string",
      "description": "Bind reference to a parent contact. Format: /contacts(GUID)."
    },
    "originatingleadid@odata.bind": {
      "type": "string",
      "description": "Bind reference to the originating lead. Format: /leads(GUID)."
    },
    "campaignid@odata.bind": {
      "type": "string",
      "description": "Bind reference to the source campaign. Format: /campaigns(GUID)."
    },
    "transactioncurrencyid@odata.bind": {
      "type": "string",
      "description": "Bind reference to a currency record. Format: /transactioncurrencies(GUID)."
    }
  }
}