{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "schema:FinancialIncentive",
  "title": "FinancialIncentive",
  "description": "Represents financial incentives for goods/services offered by an organization (or individual).\n\nTypically contains the [[name]] of the incentive, the [[incentivizedItem]], the [[incentiveAmount]], the [[incentiveStatus]], [[incentiveType]], the [[provider]] of the incentive, and [[eligibleWithSupplier]].\n\nOptionally contains criteria on whether the incentive is limited based on [[purchaseType]], [[purchasePriceLimit]], [[incomeLimit]], and the [[qualifiedExpense]].\n    ",
  "type": "object",
  "allOf": [
    {
      "description": "A utility class that serves as the umbrella for a number of 'intangible' things such as quantities, structured values, etc.",
      "$ref": "schema:Intangible"
    }
  ],
  "properties": {
    "areaServed": {
      "description": "The geographic area where a service or offered item is provided.",
      "anyOf": [
        { "type": "string" },
        { "$ref": "schema:AdministrativeArea" },
        { "$ref": "schema:GeoShape" },
        { "$ref": "schema:Place" }
      ]
    },
    "eligibleWithSupplier": {
      "description": "The supplier of the incentivized item/service for which the incentive is valid for such as a utility company, merchant, or contractor.",
      "$ref": "schema:Organization"
    },
    "incentiveAmount": {
      "description": "Describes the amount that can be redeemed from this incentive.\n    \n[[QuantitativeValue]]: Use this for incentives based on price (either raw amount or percentage-based). For a raw amount example, \"You can claim $2,500 - $7,500 from the total cost of installation\" would be represented as the following:\n    {\n        \"@type\": \"QuantitativeValue\",\n        “minValue”: 2500,\n        “maxValue”: 7500,\n        \"unitCode\": \"USD\"\n    }\n[[QuantitivateValue]] can also be used for percentage amounts. In such cases, value is used to represent the incentive’s percentage, while maxValue represents a limit (if one exists) to that incentive. The unitCode should be 'P1' and the unitText should be '%', while valueReference should be used for holding the currency type. For example, \"You can claim up to 30% of the total cost of installation, up to a maximum of $7,500\" would be:\n    {\n        \"@type\": \"QuantitativeValue\",\n        \"value\": 30,\n        \"unitCode\": \"P1\",\n        \"unitText\": \"%\",\n        “maxValue”: 7500,\n        “valueReference”: “USD”\n    }\n[[UnitPriceSpecification]]: Use this for incentives that are based on amounts rather than price. For example, a net metering rebate that pays $10/kWh, up to $1,000:\n    {\n        \"@type\": \"UnitPriceSpecification\",\n        \"price\": 10,\n        \"priceCurrency\": \"USD\",\n        \"referenceQuantity\": 1,\n        \"unitCode\": \"DO3\",\n        \"unitText\": \"kw/h\",\n        \"maxPrice\": 1000,\n        \"description\": \"$10 / kwh up to $1000\"\n    }\n[[LoanOrCredit]]: Use for incentives that are loan based. For example, a loan of $4,000 - $50,000 with a repayment term of 10 years, interest free would look like:\n    {\n        \"@type\": \"LoanOrCredit\",\n        \"loanTerm\": {\n                \"@type\":\"QuantitativeValue\",\n                \"value\":\"10\",\n                \"unitCode\": \"ANN\"\n            },\n        \"amount\":[\n            {\n                \"@type\": \"QuantitativeValue\",\n                \"Name\":\"fixed interest rate\",\n                \"value\":\"0\",\n            },\n        ],\n        \"amount\":[\n            {\n                \"@type\": \"MonetaryAmount\",\n                \"Name\":\"min loan amount\",\n                \"value\":\"4000\",\n                \"currency\":\"CAD\"\n            },\n            {\n                \"@type\": \"MonetaryAmount\",\n                \"Name\":\"max loan amount\",\n                \"value\":\"50000\",\n                \"currency\":\"CAD\"\n            }\n        ],\n    }\n\nIn summary: Use [[QuantitativeValue]] for absolute/percentage-based incentives applied on the price of a good/service.\nUse [[UnitPriceSpecification]] for incentives based on a per-unit basis (e.g. net metering).\nUse [[LoanOrCredit]] for loans/credits.\n.",
      "oneOf": [
        {
          "anyOf": [
            { "$ref": "schema:LoanOrCredit" },
            { "$ref": "schema:QuantitativeValue" },
            { "$ref": "schema:UnitPriceSpecification" }
          ]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "schema:LoanOrCredit" },
              { "$ref": "schema:QuantitativeValue" },
              { "$ref": "schema:UnitPriceSpecification" }
            ]
          }
        }
      ]
    },
    "incentiveStatus": {
      "description": "The status of the incentive (active, on hold, retired, etc.).",
      "$ref": "schema:IncentiveStatus"
    },
    "incentiveType": {
      "description": "The type of incentive offered (tax credit/rebate, tax deduction, tax waiver, subsidies, etc.).",
      "$ref": "schema:IncentiveType"
    },
    "incentivizedItem": {
      "description": "The type or specific product(s) and/or service(s) being incentivized.\nDefinedTermSets are used for product and service categories such as the United Nations Standard Products and Services Code:\n    {\n        \"@type\": \"DefinedTerm\",\n        \"inDefinedTermSet\": \"https://www.unspsc.org/\",\n        \"termCode\": \"261315XX\",\n        \"name\": \"Photovoltaic module\"\n    }\n\nFor a specific product or service, use the Product type:\n    {\n        \"@type\": \"Product\",\n        \"name\": \"Kenmore White 17\" Microwave\",\n    }\nFor multiple different incentivized items, use multiple [[DefinedTerm]] or [[Product]].",
      "anyOf": [{ "$ref": "schema:DefinedTerm" }, { "$ref": "schema:Product" }]
    },
    "incomeLimit": {
      "description": "Optional. Income limit for which the incentive is applicable for.\n    \nIf MonetaryAmount is specified, this should be based on annualized income (e.g. if an incentive is limited to those making <$114,000 annually):\n    {\n        \"@type\": \"MonetaryAmount\",\n        \"maxValue\": 114000,\n        \"currency\": \"USD\",\n    }\n\nUse Text for incentives that are limited based on other criteria, for example if an incentive is only available to recipients making 120% of the median poverty income in their area.",
      "oneOf": [
        {
          "anyOf": [{ "type": "string" }, { "$ref": "schema:MonetaryAmount" }]
        },
        {
          "type": "array",
          "items": {
            "anyOf": [{ "type": "string" }, { "$ref": "schema:MonetaryAmount" }]
          }
        }
      ]
    },
    "provider": {
      "description": "The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller.",
      "anyOf": [{ "$ref": "schema:Organization" }, { "$ref": "schema:Person" }]
    },
    "publisher": {
      "description": "The publisher of the article in question.",
      "anyOf": [{ "$ref": "schema:Organization" }, { "$ref": "schema:Person" }]
    },
    "purchasePriceLimit": {
      "description": "Optional. The maximum price the item can have and still qualify for this offer.",
      "oneOf": [
        { "$ref": "schema:MonetaryAmount" },
        { "type": "array", "items": { "$ref": "schema:MonetaryAmount" } }
      ]
    },
    "purchaseType": {
      "description": "Optional. The type of purchase the consumer must make in order to qualify for this incentive.",
      "oneOf": [
        { "$ref": "schema:PurchaseType" },
        { "type": "array", "items": { "$ref": "schema:PurchaseType" } }
      ]
    },
    "qualifiedExpense": {
      "description": "Optional. The types of expenses that are covered by the incentive. For example some incentives are only for the goods (tangible items) but the services (labor) are excluded.",
      "oneOf": [
        { "$ref": "schema:IncentiveQualifiedExpenseType" },
        {
          "type": "array",
          "items": { "$ref": "schema:IncentiveQualifiedExpenseType" }
        }
      ]
    },
    "validFrom": {
      "description": "The date when the item becomes valid.",
      "anyOf": [
        { "type": "string", "format": "date" },
        { "type": "string", "format": "date-time" }
      ]
    },
    "validThrough": {
      "description": "The date after when the item is not valid. For example the end of an offer, salary period, or a period of opening hours.",
      "anyOf": [
        { "type": "string", "format": "date" },
        { "type": "string", "format": "date-time" }
      ]
    }
  }
}
