Quotaline Commissions

Commission payouts, statements

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
100%
이름 품질
93%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~8,359토큰 (도구 정의)
~29.6 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 6.53%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "commission-calculator": {
      "url": "https://commission-calculator.zovo.one/mcp"
    }
  }
}

원격 엔드포인트

https://commission-calculator.zovo.one/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (3)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢calculate_commission(plan, sales_total, deals, rep_name, prior_balance, ...)

Use this when the user wants to calculate sales commission for one rep: a flat rate, a tiered commission ("5% up to 50k then 8% above"), quota attainment with accelerators or decelerators, a cap, a draw against commission, split deals ("split commission 60/40"), SPIFFs, clawbacks for refunded or cancelled deals, gross-margin commission, or OTE/target variable pay. Give either a sales_total or the deals. Returns the commission per deal with the tier applied, the tier breakdown, marginal and retroactive results when the plan does not say which, the draw recovery, the amount payable now, and a PDF commission statement plus an Excel file. Does not compute taxes or take-home pay. Do not use for a whole team or an uploaded deals file (use generate_commission_statements) or for commission-free trading.

입력 스키마

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Plan label, e.g. \"AE plan FY26\" or \"Plan A\".",
          "type": "string",
          "maxLength": 60
        },
        "commission_base": {
          "description": "What the rate applies to: revenue (deal amount, default) or gross_margin (each deal's margin or margin_percent).",
          "type": "string",
          "enum": [
            "revenue",
            "gross_margin"
          ]
        },
        "rate": {
          "description": "Flat commission rate in percent, e.g. 10 for 10%. With tiers that use multipliers this is the base commission rate.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "tiers": {
          "description": "Tiered rates in ascending order. \"5% up to 50k then 8% above\" = [{\"up_to\":50000,\"rate\":5},{\"up_to\":null,\"rate\":8}]. Accelerator over quota with tier_unit quota_percent: [{\"up_to\":100,\"rate\":10},{\"up_to\":null,\"rate\":15}].",
          "maxItems": 12,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "up_to": {
                "description": "Upper limit of this tier, inclusive, in currency (e.g. 50000) or in percent of quota when tier_unit is quota_percent (e.g. 100). Leave null on the last, open-ended tier.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100000000000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rate": {
                "description": "Commission rate for this tier in percent, e.g. 8 for 8%.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "multiplier": {
                "description": "Instead of a rate: a multiple of the base commission rate, e.g. 1.5 for an accelerator above quota or 0.5 for a decelerator below 50% of quota.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 20
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "tier_unit": {
          "description": "Tier limits in currency (amount, default) or in percent of quota attainment (quota_percent, needs quota).",
          "type": "string",
          "enum": [
            "amount",
            "quota_percent"
          ]
        },
        "tier_method": {
          "description": "marginal (stepped: each slice of sales at its own tier rate) or retroactive (all sales at the rate of the highest tier reached). Leave out when the plan wording does not say; both results are then shown.",
          "type": "string",
          "enum": [
            "marginal",
            "retroactive"
          ]
        },
        "quota": {
          "description": "Quota for the period in currency, e.g. 150000. Used for attainment and quota-percent tiers.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "target_variable": {
          "description": "Target variable (incentive) pay at 100% of quota for the period, e.g. 15000. With quota it sets the base commission rate = target_variable / quota.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "ote": {
          "description": "On-target earnings for the period, e.g. 30000; use with base_salary to derive target variable pay = OTE - base salary.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "base_salary": {
          "description": "Base salary for the same period as ote, e.g. 15000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "cap_amount": {
          "description": "Maximum commission on deals for the period, e.g. 25000. SPIFFs and bonuses are outside the cap.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_amount": {
          "description": "Draw against commission paid for the period, e.g. 3000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_type": {
          "description": "recoverable (default: a shortfall carries forward and is repaid from later commission) or non_recoverable (the shortfall is forgiven, not repaid).",
          "type": "string",
          "enum": [
            "recoverable",
            "non_recoverable"
          ]
        },
        "clawback_window_days": {
          "description": "Days after close in which a refund or cancellation claws back commission, e.g. 90. Leave out to claw back any cancellation.",
          "type": "integer",
          "minimum": 0,
          "maximum": 3650
        },
        "clawback_percent": {
          "description": "Share of the original commission clawed back, in percent, default 100.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "unknown_status_as_won": {
          "description": "Count deals whose status is not recognised (e.g. \"Signed - pending\") as closed-won. Default false: they are listed as not counted.",
          "type": "boolean"
        },
        "bonuses": {
          "description": "One-off bonuses or SPIFFs for the period, outside tiers and the cap, e.g. [{\"label\":\"President's club SPIFF\",\"amount\":1000}].",
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 80,
                "description": "Bonus or SPIFF name, e.g. \"Q3 new-logo SPIFF\"."
              },
              "amount": {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000,
                "description": "Amount, e.g. 500."
              }
            },
            "required": [
              "label",
              "amount"
            ]
          }
        }
      },
      "description": "The commission plan terms: rate or tiers, quota, cap, draw, clawback rules, e.g. {\"tiers\":[{\"up_to\":50000,\"rate\":5},{\"up_to\":null,\"rate\":8}]}."
    },
    "sales_total": {
      "description": "Total credited sales for the period when there are no individual deals, e.g. 72000.",
      "type": "number",
      "minimum": -100000000000,
      "maximum": 100000000000
    },
    "deals": {
      "description": "The rep's deals for the period, e.g. [{\"deal\":\"Acme\",\"amount\":24000,\"close_date\":\"2026-09-14\"},{\"deal\":\"Globex\",\"amount\":18000,\"split_percent\":60}].",
      "maxItems": 500,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "deal": {
            "description": "Deal, customer or invoice name, e.g. \"Acme renewal\".",
            "type": "string",
            "maxLength": 120
          },
          "amount": {
            "type": "number",
            "minimum": -100000000000,
            "maximum": 100000000000,
            "description": "Deal amount (revenue) in currency, e.g. 24000. Negative = credit or adjustment."
          },
          "margin": {
            "description": "Gross margin amount of the deal, e.g. 7200 (for gross_margin plans).",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "margin_percent": {
            "description": "Gross margin in percent of the amount, e.g. 30 (alternative to margin).",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "close_date": {
            "description": "Close date, e.g. 2026-09-14 or 9/14/2026 (US order). Sets the order in which deals fill tiers.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "description": "Deal status, e.g. won (default), refunded, cancelled, churned, chargeback, lost, open. Cancelled deals are clawed back; lost and open deals are not counted.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ]
          },
          "cancel_date": {
            "description": "Refund or cancellation date for the clawback window, e.g. 2026-10-20.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "split_percent": {
            "description": "This rep's share of the deal in percent, e.g. 60 for a 60/40 split. Default 100.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "spiff": {
            "description": "SPIFF paid on this deal, e.g. 250 (outside tiers and cap; split with the deal).",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "commission_paid": {
            "description": "For a refunded deal from an earlier period: commission already paid on it, e.g. 1200. The clawback uses this amount.",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "amount"
        ]
      }
    },
    "rep_name": {
      "description": "Rep name for the statement, e.g. \"Maria Lopez\".",
      "type": "string",
      "maxLength": 80
    },
    "prior_balance": {
      "description": "Unrecovered draw or clawback balance owed from earlier periods, e.g. 1500.",
      "type": "number",
      "minimum": 0,
      "maximum": 100000000000
    },
    "company_name": {
      "description": "Company name printed on the statement, e.g. \"Acme Corp\".",
      "type": "string",
      "maxLength": 80
    },
    "period_start": {
      "description": "First day of the commission period, e.g. 2026-09-01. Deals closed outside the period are not counted.",
      "type": "string",
      "maxLength": 30
    },
    "period_end": {
      "description": "Last day of the period, e.g. 2026-09-30.",
      "type": "string",
      "maxLength": 30
    },
    "period_label": {
      "description": "Label printed on statements, e.g. \"September 2026\" or \"Q3 2026\".",
      "type": "string",
      "maxLength": 60
    },
    "currency": {
      "description": "ISO currency code, default USD, e.g. CAD or EUR.",
      "type": "string",
      "maxLength": 3
    }
  },
  "required": [
    "plan"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string"
    },
    "currency": {
      "type": "string"
    },
    "period": {
      "type": [
        "string",
        "null"
      ]
    },
    "rep": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "pdf": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "required": [
        "pdf",
        "xlsx"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "mode",
    "currency",
    "period",
    "rep",
    "notes",
    "downloads"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢generate_commission_statements(plan, file, deals, rep_overrides, column_map, ...)

Use this when the user wants commission statements for several reps, asks "how much commission did each rep earn this month", or attaches a deals export (CSV or Excel from a CRM or spreadsheet with rep, deal, amount, margin, close date, status columns; columns are matched automatically). Applies one plan to all reps (with per-rep quota, draw and prior balance overrides), handles split deals, SPIFFs, clawbacks, caps and draws, and returns a team summary, a commission statement PDF with one section per rep, and an Excel workbook listing each deal line. Does not compute taxes, withholding or take-home pay, and does not read PDF or image files. Do not use for a single quick commission question (use calculate_commission).

입력 스키마

{
  "type": "object",
  "properties": {
    "plan": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Plan label, e.g. \"AE plan FY26\" or \"Plan A\".",
          "type": "string",
          "maxLength": 60
        },
        "commission_base": {
          "description": "What the rate applies to: revenue (deal amount, default) or gross_margin (each deal's margin or margin_percent).",
          "type": "string",
          "enum": [
            "revenue",
            "gross_margin"
          ]
        },
        "rate": {
          "description": "Flat commission rate in percent, e.g. 10 for 10%. With tiers that use multipliers this is the base commission rate.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "tiers": {
          "description": "Tiered rates in ascending order. \"5% up to 50k then 8% above\" = [{\"up_to\":50000,\"rate\":5},{\"up_to\":null,\"rate\":8}]. Accelerator over quota with tier_unit quota_percent: [{\"up_to\":100,\"rate\":10},{\"up_to\":null,\"rate\":15}].",
          "maxItems": 12,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "up_to": {
                "description": "Upper limit of this tier, inclusive, in currency (e.g. 50000) or in percent of quota when tier_unit is quota_percent (e.g. 100). Leave null on the last, open-ended tier.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100000000000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rate": {
                "description": "Commission rate for this tier in percent, e.g. 8 for 8%.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "multiplier": {
                "description": "Instead of a rate: a multiple of the base commission rate, e.g. 1.5 for an accelerator above quota or 0.5 for a decelerator below 50% of quota.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 20
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "tier_unit": {
          "description": "Tier limits in currency (amount, default) or in percent of quota attainment (quota_percent, needs quota).",
          "type": "string",
          "enum": [
            "amount",
            "quota_percent"
          ]
        },
        "tier_method": {
          "description": "marginal (stepped: each slice of sales at its own tier rate) or retroactive (all sales at the rate of the highest tier reached). Leave out when the plan wording does not say; both results are then shown.",
          "type": "string",
          "enum": [
            "marginal",
            "retroactive"
          ]
        },
        "quota": {
          "description": "Quota for the period in currency, e.g. 150000. Used for attainment and quota-percent tiers.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "target_variable": {
          "description": "Target variable (incentive) pay at 100% of quota for the period, e.g. 15000. With quota it sets the base commission rate = target_variable / quota.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "ote": {
          "description": "On-target earnings for the period, e.g. 30000; use with base_salary to derive target variable pay = OTE - base salary.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "base_salary": {
          "description": "Base salary for the same period as ote, e.g. 15000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "cap_amount": {
          "description": "Maximum commission on deals for the period, e.g. 25000. SPIFFs and bonuses are outside the cap.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_amount": {
          "description": "Draw against commission paid for the period, e.g. 3000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_type": {
          "description": "recoverable (default: a shortfall carries forward and is repaid from later commission) or non_recoverable (the shortfall is forgiven, not repaid).",
          "type": "string",
          "enum": [
            "recoverable",
            "non_recoverable"
          ]
        },
        "clawback_window_days": {
          "description": "Days after close in which a refund or cancellation claws back commission, e.g. 90. Leave out to claw back any cancellation.",
          "type": "integer",
          "minimum": 0,
          "maximum": 3650
        },
        "clawback_percent": {
          "description": "Share of the original commission clawed back, in percent, default 100.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "unknown_status_as_won": {
          "description": "Count deals whose status is not recognised (e.g. \"Signed - pending\") as closed-won. Default false: they are listed as not counted.",
          "type": "boolean"
        },
        "bonuses": {
          "description": "One-off bonuses or SPIFFs for the period, outside tiers and the cap, e.g. [{\"label\":\"President's club SPIFF\",\"amount\":1000}].",
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 80,
                "description": "Bonus or SPIFF name, e.g. \"Q3 new-logo SPIFF\"."
              },
              "amount": {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000,
                "description": "Amount, e.g. 500."
              }
            },
            "required": [
              "label",
              "amount"
            ]
          }
        }
      },
      "description": "One plan applied to all reps (per-rep quota, draw and balance go in rep_overrides), e.g. {\"rate\":8,\"clawback_window_days\":90}."
    },
    "file": {
      "type": "object",
      "properties": {
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        },
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "mime_type": {
          "description": "Media type if known, e.g. application/pdf.",
          "type": "string"
        },
        "file_name": {
          "description": "Original file name if known, e.g. statement.pdf.",
          "type": "string"
        }
      },
      "required": [
        "download_url",
        "file_id"
      ],
      "description": "The deals export to read, CSV or Excel (.xlsx), e.g. september-deals.csv, with one deal per row."
    },
    "deals": {
      "description": "Typed deals when there is no file, each with rep (or splits), e.g. [{\"rep\":\"Ana\",\"deal\":\"Acme\",\"amount\":30000},{\"deal\":\"Globex\",\"amount\":20000,\"splits\":[{\"rep\":\"Ana\",\"percent\":60},{\"rep\":\"Ben\",\"percent\":40}]}].",
      "maxItems": 2000,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rep": {
            "description": "Sales rep credited with the deal, e.g. \"Maria Lopez\".",
            "type": "string",
            "maxLength": 80
          },
          "splits": {
            "description": "Split between reps instead of rep, e.g. [{\"rep\":\"Ana\",\"percent\":60},{\"rep\":\"Ben\",\"percent\":40}].",
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rep": {
                  "type": "string",
                  "maxLength": 80,
                  "description": "Rep name, e.g. \"Dan Kim\"."
                },
                "percent": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 100,
                  "description": "Share in percent, e.g. 40."
                }
              },
              "required": [
                "rep",
                "percent"
              ]
            }
          },
          "deal": {
            "description": "Deal, customer or invoice name, e.g. \"Acme renewal\".",
            "type": "string",
            "maxLength": 120
          },
          "amount": {
            "type": "number",
            "minimum": -100000000000,
            "maximum": 100000000000,
            "description": "Deal amount (revenue) in currency, e.g. 24000. Negative = credit or adjustment."
          },
          "margin": {
            "description": "Gross margin amount of the deal, e.g. 7200 (for gross_margin plans).",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "margin_percent": {
            "description": "Gross margin in percent of the amount, e.g. 30 (alternative to margin).",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "close_date": {
            "description": "Close date, e.g. 2026-09-14 or 9/14/2026 (US order). Sets the order in which deals fill tiers.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "status": {
            "description": "Deal status, e.g. won (default), refunded, cancelled, churned, chargeback, lost, open. Cancelled deals are clawed back; lost and open deals are not counted.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ]
          },
          "cancel_date": {
            "description": "Refund or cancellation date for the clawback window, e.g. 2026-10-20.",
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30
              },
              {
                "type": "null"
              }
            ]
          },
          "split_percent": {
            "description": "This rep's share of the deal in percent, e.g. 60 for a 60/40 split. Default 100.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "spiff": {
            "description": "SPIFF paid on this deal, e.g. 250 (outside tiers and cap; split with the deal).",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000
              },
              {
                "type": "null"
              }
            ]
          },
          "commission_paid": {
            "description": "For a refunded deal from an earlier period: commission already paid on it, e.g. 1200. The clawback uses this amount.",
            "anyOf": [
              {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "amount"
        ]
      }
    },
    "rep_overrides": {
      "description": "Per-rep quota, target variable, draw or prior balance, e.g. [{\"rep\":\"Ana\",\"quota\":120000,\"draw_amount\":2000}].",
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rep": {
            "type": "string",
            "maxLength": 80,
            "description": "Rep name as it appears in the deals, e.g. \"Maria Lopez\"."
          },
          "quota": {
            "description": "This rep's quota for the period, e.g. 120000.",
            "type": "number",
            "minimum": 0,
            "maximum": 100000000000
          },
          "target_variable": {
            "description": "This rep's target variable pay, e.g. 12000.",
            "type": "number",
            "minimum": 0,
            "maximum": 100000000000
          },
          "draw_amount": {
            "description": "This rep's draw for the period, e.g. 2500.",
            "type": "number",
            "minimum": 0,
            "maximum": 100000000000
          },
          "prior_balance": {
            "description": "Unrecovered draw or clawback balance this rep still owes from earlier periods, e.g. 800.",
            "type": "number",
            "minimum": 0,
            "maximum": 100000000000
          }
        },
        "required": [
          "rep"
        ]
      }
    },
    "column_map": {
      "description": "Only if automatic matching picks the wrong column: file header per field, e.g. {\"amount\":\"Net Revenue\",\"rep\":\"Opportunity Owner\"}.",
      "type": "object",
      "properties": {
        "rep": {
          "description": "Header of the rep column, e.g. \"Deal Owner\".",
          "type": "string",
          "maxLength": 80
        },
        "deal": {
          "description": "Header of the deal column, e.g. \"Opportunity Name\".",
          "type": "string",
          "maxLength": 80
        },
        "amount": {
          "description": "Header of the amount column, e.g. \"Amount\".",
          "type": "string",
          "maxLength": 80
        },
        "margin": {
          "description": "Header of the margin column, e.g. \"Gross Profit\".",
          "type": "string",
          "maxLength": 80
        },
        "margin_percent": {
          "description": "Header of the margin percent column, e.g. \"GM %\".",
          "type": "string",
          "maxLength": 80
        },
        "close_date": {
          "description": "Header of the close date column, e.g. \"Close Date\".",
          "type": "string",
          "maxLength": 80
        },
        "status": {
          "description": "Header of the status column, e.g. \"Stage\".",
          "type": "string",
          "maxLength": 80
        },
        "cancel_date": {
          "description": "Header of the cancel date column, e.g. \"Cancel Date\".",
          "type": "string",
          "maxLength": 80
        },
        "split_percent": {
          "description": "Header of the split percent column, e.g. \"Split %\".",
          "type": "string",
          "maxLength": 80
        },
        "spiff": {
          "description": "Header of the spiff column, e.g. \"SPIFF\".",
          "type": "string",
          "maxLength": 80
        },
        "commission_paid": {
          "description": "Header of the commission paid column, e.g. \"Commission Paid\".",
          "type": "string",
          "maxLength": 80
        }
      }
    },
    "sheet_name": {
      "description": "Excel sheet to read, e.g. \"Closed Won\". Default: the first sheet with an amount column.",
      "type": "string",
      "maxLength": 60
    },
    "rep_name": {
      "description": "Rep to credit when the file has no rep column, e.g. \"Maria Lopez\".",
      "type": "string",
      "maxLength": 80
    },
    "company_name": {
      "description": "Company name printed on the statements, e.g. \"Acme Corp\".",
      "type": "string",
      "maxLength": 80
    },
    "period_start": {
      "description": "First day of the commission period, e.g. 2026-09-01. Deals closed outside the period are not counted.",
      "type": "string",
      "maxLength": 30
    },
    "period_end": {
      "description": "Last day of the period, e.g. 2026-09-30.",
      "type": "string",
      "maxLength": 30
    },
    "period_label": {
      "description": "Label printed on statements, e.g. \"September 2026\" or \"Q3 2026\".",
      "type": "string",
      "maxLength": 60
    },
    "currency": {
      "description": "ISO currency code, default USD, e.g. CAD or EUR.",
      "type": "string",
      "maxLength": 3
    }
  },
  "required": [
    "plan"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string"
    },
    "currency": {
      "type": "string"
    },
    "period": {
      "type": [
        "string",
        "null"
      ]
    },
    "source": {
      "type": "string"
    },
    "columns_used": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ]
    },
    "team": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "reps": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "reps_total": {
      "type": "number"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "downloads": {
      "type": "object",
      "properties": {
        "pdf": {
          "type": "string"
        },
        "xlsx": {
          "type": "string"
        }
      },
      "required": [
        "pdf",
        "xlsx"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "mode",
    "currency",
    "period",
    "source",
    "columns_used",
    "team",
    "reps",
    "reps_total",
    "notes",
    "downloads"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢compare_comp_plans(plan_a, plan_b, sales_levels, currency)

Use this when the user wants to compare two commission plans or comp plans ("compare these two comp plans", "which plan pays more at 120% of quota"): computes the commission each plan pays at several sales levels, the difference, and where one plan overtakes the other, with tiers, accelerators, quota percentages and caps applied, computed in cents. Does not handle draws, deal lists or taxes, and does not judge which plan is fair. Do not use for a single plan's payout (use calculate_commission).

입력 스키마

{
  "type": "object",
  "properties": {
    "plan_a": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Plan label, e.g. \"AE plan FY26\" or \"Plan A\".",
          "type": "string",
          "maxLength": 60
        },
        "commission_base": {
          "description": "What the rate applies to: revenue (deal amount, default) or gross_margin (each deal's margin or margin_percent).",
          "type": "string",
          "enum": [
            "revenue",
            "gross_margin"
          ]
        },
        "rate": {
          "description": "Flat commission rate in percent, e.g. 10 for 10%. With tiers that use multipliers this is the base commission rate.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "tiers": {
          "description": "Tiered rates in ascending order. \"5% up to 50k then 8% above\" = [{\"up_to\":50000,\"rate\":5},{\"up_to\":null,\"rate\":8}]. Accelerator over quota with tier_unit quota_percent: [{\"up_to\":100,\"rate\":10},{\"up_to\":null,\"rate\":15}].",
          "maxItems": 12,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "up_to": {
                "description": "Upper limit of this tier, inclusive, in currency (e.g. 50000) or in percent of quota when tier_unit is quota_percent (e.g. 100). Leave null on the last, open-ended tier.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100000000000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rate": {
                "description": "Commission rate for this tier in percent, e.g. 8 for 8%.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "multiplier": {
                "description": "Instead of a rate: a multiple of the base commission rate, e.g. 1.5 for an accelerator above quota or 0.5 for a decelerator below 50% of quota.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 20
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "tier_unit": {
          "description": "Tier limits in currency (amount, default) or in percent of quota attainment (quota_percent, needs quota).",
          "type": "string",
          "enum": [
            "amount",
            "quota_percent"
          ]
        },
        "tier_method": {
          "description": "marginal (stepped: each slice of sales at its own tier rate) or retroactive (all sales at the rate of the highest tier reached). Leave out when the plan wording does not say; both results are then shown.",
          "type": "string",
          "enum": [
            "marginal",
            "retroactive"
          ]
        },
        "quota": {
          "description": "Quota for the period in currency, e.g. 150000. Used for attainment and quota-percent tiers.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "target_variable": {
          "description": "Target variable (incentive) pay at 100% of quota for the period, e.g. 15000. With quota it sets the base commission rate = target_variable / quota.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "ote": {
          "description": "On-target earnings for the period, e.g. 30000; use with base_salary to derive target variable pay = OTE - base salary.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "base_salary": {
          "description": "Base salary for the same period as ote, e.g. 15000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "cap_amount": {
          "description": "Maximum commission on deals for the period, e.g. 25000. SPIFFs and bonuses are outside the cap.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_amount": {
          "description": "Draw against commission paid for the period, e.g. 3000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_type": {
          "description": "recoverable (default: a shortfall carries forward and is repaid from later commission) or non_recoverable (the shortfall is forgiven, not repaid).",
          "type": "string",
          "enum": [
            "recoverable",
            "non_recoverable"
          ]
        },
        "clawback_window_days": {
          "description": "Days after close in which a refund or cancellation claws back commission, e.g. 90. Leave out to claw back any cancellation.",
          "type": "integer",
          "minimum": 0,
          "maximum": 3650
        },
        "clawback_percent": {
          "description": "Share of the original commission clawed back, in percent, default 100.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "unknown_status_as_won": {
          "description": "Count deals whose status is not recognised (e.g. \"Signed - pending\") as closed-won. Default false: they are listed as not counted.",
          "type": "boolean"
        },
        "bonuses": {
          "description": "One-off bonuses or SPIFFs for the period, outside tiers and the cap, e.g. [{\"label\":\"President's club SPIFF\",\"amount\":1000}].",
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 80,
                "description": "Bonus or SPIFF name, e.g. \"Q3 new-logo SPIFF\"."
              },
              "amount": {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000,
                "description": "Amount, e.g. 500."
              }
            },
            "required": [
              "label",
              "amount"
            ]
          }
        }
      },
      "description": "First plan, e.g. {\"name\":\"Flat 10%\",\"rate\":10}."
    },
    "plan_b": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Plan label, e.g. \"AE plan FY26\" or \"Plan A\".",
          "type": "string",
          "maxLength": 60
        },
        "commission_base": {
          "description": "What the rate applies to: revenue (deal amount, default) or gross_margin (each deal's margin or margin_percent).",
          "type": "string",
          "enum": [
            "revenue",
            "gross_margin"
          ]
        },
        "rate": {
          "description": "Flat commission rate in percent, e.g. 10 for 10%. With tiers that use multipliers this is the base commission rate.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "tiers": {
          "description": "Tiered rates in ascending order. \"5% up to 50k then 8% above\" = [{\"up_to\":50000,\"rate\":5},{\"up_to\":null,\"rate\":8}]. Accelerator over quota with tier_unit quota_percent: [{\"up_to\":100,\"rate\":10},{\"up_to\":null,\"rate\":15}].",
          "maxItems": 12,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "up_to": {
                "description": "Upper limit of this tier, inclusive, in currency (e.g. 50000) or in percent of quota when tier_unit is quota_percent (e.g. 100). Leave null on the last, open-ended tier.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100000000000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rate": {
                "description": "Commission rate for this tier in percent, e.g. 8 for 8%.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "multiplier": {
                "description": "Instead of a rate: a multiple of the base commission rate, e.g. 1.5 for an accelerator above quota or 0.5 for a decelerator below 50% of quota.",
                "anyOf": [
                  {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 20
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "tier_unit": {
          "description": "Tier limits in currency (amount, default) or in percent of quota attainment (quota_percent, needs quota).",
          "type": "string",
          "enum": [
            "amount",
            "quota_percent"
          ]
        },
        "tier_method": {
          "description": "marginal (stepped: each slice of sales at its own tier rate) or retroactive (all sales at the rate of the highest tier reached). Leave out when the plan wording does not say; both results are then shown.",
          "type": "string",
          "enum": [
            "marginal",
            "retroactive"
          ]
        },
        "quota": {
          "description": "Quota for the period in currency, e.g. 150000. Used for attainment and quota-percent tiers.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "target_variable": {
          "description": "Target variable (incentive) pay at 100% of quota for the period, e.g. 15000. With quota it sets the base commission rate = target_variable / quota.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "ote": {
          "description": "On-target earnings for the period, e.g. 30000; use with base_salary to derive target variable pay = OTE - base salary.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "base_salary": {
          "description": "Base salary for the same period as ote, e.g. 15000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "cap_amount": {
          "description": "Maximum commission on deals for the period, e.g. 25000. SPIFFs and bonuses are outside the cap.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_amount": {
          "description": "Draw against commission paid for the period, e.g. 3000.",
          "type": "number",
          "minimum": 0,
          "maximum": 100000000000
        },
        "draw_type": {
          "description": "recoverable (default: a shortfall carries forward and is repaid from later commission) or non_recoverable (the shortfall is forgiven, not repaid).",
          "type": "string",
          "enum": [
            "recoverable",
            "non_recoverable"
          ]
        },
        "clawback_window_days": {
          "description": "Days after close in which a refund or cancellation claws back commission, e.g. 90. Leave out to claw back any cancellation.",
          "type": "integer",
          "minimum": 0,
          "maximum": 3650
        },
        "clawback_percent": {
          "description": "Share of the original commission clawed back, in percent, default 100.",
          "type": "number",
          "minimum": 0,
          "maximum": 100
        },
        "unknown_status_as_won": {
          "description": "Count deals whose status is not recognised (e.g. \"Signed - pending\") as closed-won. Default false: they are listed as not counted.",
          "type": "boolean"
        },
        "bonuses": {
          "description": "One-off bonuses or SPIFFs for the period, outside tiers and the cap, e.g. [{\"label\":\"President's club SPIFF\",\"amount\":1000}].",
          "maxItems": 20,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "label": {
                "type": "string",
                "maxLength": 80,
                "description": "Bonus or SPIFF name, e.g. \"Q3 new-logo SPIFF\"."
              },
              "amount": {
                "type": "number",
                "minimum": -100000000000,
                "maximum": 100000000000,
                "description": "Amount, e.g. 500."
              }
            },
            "required": [
              "label",
              "amount"
            ]
          }
        }
      },
      "description": "Second plan, e.g. {\"name\":\"Accelerated\",\"quota\":100000,\"tier_unit\":\"quota_percent\",\"tiers\":[{\"up_to\":100,\"rate\":8},{\"up_to\":null,\"rate\":14}]}."
    },
    "sales_levels": {
      "description": "Sales totals to compare at, e.g. [50000, 100000, 150000]. Default: 50% to 200% of the quota.",
      "maxItems": 12,
      "type": "array",
      "items": {
        "type": "number",
        "minimum": 0,
        "maximum": 100000000000
      }
    },
    "currency": {
      "description": "ISO currency code, default USD, e.g. CAD or EUR.",
      "type": "string",
      "maxLength": 3
    }
  },
  "required": [
    "plan_a",
    "plan_b"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

출력 스키마

{
  "type": "object",
  "properties": {
    "mode": {
      "type": "string"
    },
    "currency": {
      "type": "string"
    },
    "plans": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "rows": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "crossovers": {
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "summary": {
      "type": "string"
    }
  },
  "required": [
    "mode",
    "currency",
    "plans",
    "rows",
    "crossovers",
    "summary"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 3개