{
  "title": "Reconcile gross purchases and refunds without moving the cohort",
  "synthetic": true,
  "inputs": {
    "gross": 5000,
    "refunds": 400
  },
  "outputs": [
    {
      "label": "After-refund revenue",
      "actual": 4600,
      "expected": 4600,
      "passed": true
    },
    {
      "label": "Refund share %",
      "actual": 8,
      "expected": 8,
      "passed": true
    }
  ],
  "constraints": [
    "v.gross>0",
    "v.refunds<=v.gross"
  ],
  "formulas": [
    {
      "label": "After-refund revenue",
      "javascript": "v.gross-v.refunds"
    },
    {
      "label": "Refund share %",
      "javascript": "100*v.refunds/v.gross"
    }
  ],
  "limits": "No real refund rate is implied. Partial refunds, exchange-rate changes and mismatched transaction keys require transaction-level reconciliation before this aggregate exercise can resolve them."
}
