Skip to content

Sample Touring Model

Background

The following sections document implementation of the current working DSL model (that includes the for_each construct) for a complex touring deal. This deal has cross-collateralized shows and individuallysettled shows.

In the following sections you will find:

  • An ANTLR description of this deal type
  • The related JSON schema it would require
  • An instance of the deal with populated JSON values

Basic Approach

The DSL model has two for_each sections, one for the cross-collateralized shows and one for the individually settled shows. Data for the shows come in through two different JSON collections. Clauses for each type of show is included in the for_each sections, as are events and calculations. The cross-collateralized section is followed by a clause that defines the end of tour payouts.

This structure can handle any type of plus deal by only passing relevant JSON show instances to the model.

Known Issues

These issues are outstanding and not adequately addressed in the example:

  • Bonus thresholds are hard coded into the model. This is not the correct long-term solution. The ultimate solution will come when we figure out the best way to model events that can occur multiple times but that the recurrence is not known at the time the deal is signed. This is the Recurring Events Issue.
  • This deal is a plus deal. That is coded into the model. If we want to be able to have the general model handle both plus and versus deals, we need to determine how to pass the operator to the model as data and what the appropriate way to evaluate that value in the model itself.

DSL Deal Model

antlr
model { deal_type: "Music Touring Deal - Multi-Show", version: 1.0.0 }

inputs { ref: "https://schemas.uta.com/deal-types/music-touring-multi-show/1.0.0.json" }

# ========== COLLECTION VARIABLES ==========
var crossed_shows       # Cross-collateralized shows (settled as group)
var individual_shows    # Individually settled shows

# ========== TOUR-LEVEL FINANCIAL TERMS ==========
var crossed_total_guarantee
var crossed_split_point
var artist_overage_share_percentage  # 50% of 90% = 0.45

var deposit_amount
var deposit_release_percentage  # 10% released per show

# ========== FOR_EACH: CROSSED SHOWS ==========
for_each show in crossed_shows {
  
  # ========== PER-SHOW EVENTS ==========
  event {
    name: show_occurred_{show.id}
    description: "Show has been performed"
    condition: show.occurred == true
  }
  
  event {
    name: show_settled_{show.id}
    description: "Show settlement complete with documented revenues/expenses"
    condition: show.settled == true
  }
  
  event {
    name: bonus_eligible_{show.id}
    description: "Show is Large O&O Amphitheater eligible for tiered bonuses"
    condition: show.is_large_oo == true
  }
  
  # ========== PER-SHOW COMPUTATIONS ==========
  computations {
    # Tiered bonus calculation (cumulative: if show hits $20k tier, gets $10k + $15k + $20k = $45k)
    # Populates show.bonus_amount field in JSON
    metric bonus_amount = 
      if show.is_large_oo && show.settled then
        (show.tickets_sold >= 11000 && show.net_ticket_sales >= 440000 ? 10000 : 0) +
        (show.tickets_sold >= 13000 && show.net_ticket_sales >= 460000 ? 15000 : 0) +
        (show.tickets_sold >= 15000 && show.net_ticket_sales >= 505000 ? 20000 : 0)
      else
        0
  }
  
  # ========== PER-SHOW CLAUSES ==========
  
  # Guarantee (part of crossed total, paid weekly after show)
  clause {
    name: show_guarantee_{show.id}
    kind: guarantee
    type: earning
    description: "Per-show guarantee (part of crossed total)"
    amount: show.guarantee_amount
    when: show_occurred_{show.id}
    schedule: by_schedule show_earning_{show.id}
    payable: by_receipt_schedule show_guarantee_receipt_{show.id}
    template: """
    Show Guarantee: {{ money(show.guarantee_amount, "USD") }}
    Payable weekly after {{ show.venue }} performance on {{ date(show.date) }}
    """
  }
  
  # Production reimbursement (treated as Show Expense in Net Pot calculation)
  clause {
    name: show_production_reimbursement_{show.id}
    kind: guarantee
    type: reimbursement
    description: "Per-show production cost reimbursement"
    amount: show.production_fee
    when: show_occurred_{show.id}
    payable: by_receipt_schedule show_production_receipt_{show.id}
    template: """
    Production Reimbursement: {{ money(show.production_fee, "USD") }}
    Payable weekly after show performance
    """
  }
  
  # Large O&O Amphitheater Bonus (tiered, cumulative)
  clause {
    name: large_oo_bonus_{show.id}
    kind: contingent
    type: earning
    description: "Tiered cumulative bonus for Large O&O Amphitheater shows"
    when: bonus_eligible_{show.id} && show_settled_{show.id}
    amount: bonus_amount  # References computed metric in same scope
    payable: by_receipt_schedule bonus_receipt_{show.id}
    template: """
    Large O&O Amphitheater Bonus: {{ money(bonus_amount, "USD") }}
    Cumulative tiers: $10k (11k tix, $440k sales), $15k (13k tix, $460k sales), $20k (15k tix, $505k sales)
    """
  }
  
  # Per-show composition (all additive)
  block {
    name: show_compensation_{show.id}
    expr: show_guarantee_{show.id} and 
          show_production_reimbursement_{show.id} and 
          large_oo_bonus_{show.id}
  }
}

# ========== AGGREGATE COMPUTATIONS: CROSSED SHOWS ==========
computations {
  # Aggregate Net Pot Revenues across all crossed shows
  metric crossed_aggregate_net_pot = sum(crossed_shows[*].net_pot_revenues)
  
  # Calculate overage above split point
  metric crossed_overage_base = max(0, crossed_aggregate_net_pot - crossed_split_point)
  
  # Artist's share of overage (50% of 90% = 45%)
  metric crossed_contingent_amount = crossed_overage_base * artist_overage_share_percentage
  
  # Summary outputs
  output crossed_total_guarantees = sum(crossed_shows[*].guarantee_amount)
  output crossed_total_production = sum(crossed_shows[*].production_fee)
  output crossed_total_bonuses = sum(crossed_shows[*].bonus_amount)  # Reads computed values
  output crossed_total_earned = 
    crossed_total_guarantees + 
    crossed_contingent_amount + 
    crossed_total_bonuses
}

# ========== TOUR-LEVEL: CROSSED CONTINGENT CLAUSE ==========
event {
  name: crossed_all_settled
  description: "All crossed shows settled, final aggregate calculation ready"
  condition: count(crossed_shows where show.settled == true) == count(crossed_shows)
}

clause {
  name: crossed_contingent_compensation
  kind: contingent
  type: earning
  description: "Aggregate overage share for crossed shows (50% of 90% of Net Pot above split)"
  when: crossed_all_settled
  amount: crossed_contingent_amount
  schedule: by_schedule crossed_contingent_earning
  payable: by_receipt_schedule crossed_contingent_receipt
  template: """
  Crossed Shows Contingent Compensation:
  Aggregate Net Pot Revenues: {{ money(crossed_aggregate_net_pot, "USD") }}
  Split Point: {{ money(crossed_split_point, "USD") }}
  Overage: {{ money(crossed_overage_base, "USD") }}
  Artist Share (50% of 90%): {{ money(crossed_contingent_amount, "USD") }}
  
  Payable: 90% at preliminary settlement (14 days post-tour)
           10% at final settlement (30 days post-tour)
  """
}

block {
  name: crossed_tour_group
  expr: crossed_contingent_compensation
}

# ========== FOR_EACH: INDIVIDUAL SHOWS ==========
for_each show in individual_shows {
  
  # ========== PER-SHOW EVENTS ==========
  event {
    name: show_occurred_{show.id}
    description: "Show has been performed"
    condition: show.occurred == true
  }
  
  event {
    name: show_settled_{show.id}
    description: "Show settlement complete"
    condition: show.settled == true
  }
  
  # ========== PER-SHOW COMPUTATIONS ==========
  computations {
    # Calculate per-show contingent amount
    # Populates show.show_contingent_amount field in JSON
    metric show_contingent_amount = 
      max(0, (show.net_pot_revenues - show.split_point) * artist_overage_share_percentage)
  }
  
  # ========== PER-SHOW CLAUSES ==========
  
  # Guarantee (paid weekly after show)
  clause {
    name: show_guarantee_{show.id}
    kind: guarantee
    type: earning
    description: "Per-show guarantee (individually settled)"
    amount: show.guarantee_amount
    when: show_occurred_{show.id}
    schedule: by_schedule show_earning_{show.id}
    payable: by_receipt_schedule show_guarantee_receipt_{show.id}
    template: """
    Show Guarantee: {{ money(show.guarantee_amount, "USD") }}
    Payable weekly after {{ show.venue }} performance on {{ date(show.date) }}
    """
  }
  
  # Production reimbursement
  clause {
    name: show_production_reimbursement_{show.id}
    kind: guarantee
    type: reimbursement
    description: "Per-show production cost reimbursement"
    amount: show.production_fee
    when: show_occurred_{show.id}
    payable: by_receipt_schedule show_production_receipt_{show.id}
    template: """
    Production Reimbursement: {{ money(show.production_fee, "USD") }}
    Payable weekly after show performance
    """
  }
  
  # Per-show contingent (calculated and paid per show, not aggregated)
  clause {
    name: show_contingent_{show.id}
    kind: contingent
    type: earning
    description: "Per-show overage share (50% of 90% of Net Pot above per-show split)"
    when: show_settled_{show.id}
    amount: show_contingent_amount  # References computed metric in same scope
    schedule: by_schedule show_contingent_earning_{show.id}
    payable: by_receipt_schedule show_contingent_receipt_{show.id}
    template: """
    Individual Show Contingent:
    Net Pot Revenues: {{ money(show.net_pot_revenues, "USD") }}
    Split Point: {{ money(show.split_point, "USD") }}
    Overage: {{ money(max(0, show.net_pot_revenues - show.split_point), "USD") }}
    Artist Share (50% of 90%): {{ money(show_contingent_amount, "USD") }}
    """
  }
  
  # Per-show composition (all additive)
  block {
    name: show_compensation_{show.id}
    expr: show_guarantee_{show.id} and 
          show_production_reimbursement_{show.id} and 
          show_contingent_{show.id}
  }
}

# ========== COMPUTATIONS: INDIVIDUAL SHOWS ==========
computations {
  # Summary outputs (reads computed values from show objects)
  output individual_total_guarantees = sum(individual_shows[*].guarantee_amount)
  output individual_total_production = sum(individual_shows[*].production_fee)
  output individual_total_contingent = sum(individual_shows[*].show_contingent_amount)  # Reads computed values
  output individual_total_earned = 
    individual_total_guarantees + 
    individual_total_contingent
}

block {
  name: individually_settled_group
  expr: show_compensation_{show.id}  # Placeholder - collection of individual compensations
}

# ========== TOUR-LEVEL COMPOSITION ==========
type {
  name: touring_deal_multi_show
  compose: crossed_tour_group and individually_settled_group
  template: """
  MUSIC TOURING AGREEMENT - MULTI-SHOW SETTLEMENT
  
  Tour includes crossed shows (settled as group) and individual shows (settled per show).
  All compensation is guarantee PLUS percentage share (additive structure).
  """
}

# ========== TOUR-LEVEL OUTPUTS ==========
computations {
  output tour_total_guarantees = crossed_total_guarantees + individual_total_guarantees
  output tour_total_production = crossed_total_production + individual_total_production
  output tour_total_contingent = crossed_contingent_amount + individual_total_contingent
  output tour_total_bonuses = crossed_total_bonuses
  output tour_grand_total = 
    tour_total_guarantees + 
    tour_total_contingent + 
    tour_total_bonuses
}

JSON Schema

json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schemas.uta.com/deal-types/music-touring-multi-show/1.0.0.json",
  "title": "Music Touring Deal - Multi-Show Settlement Schema",
  "description": "Schema for music touring deals with both cross-collateralized show groups and individually settled shows. Models guarantee + percentage structure with tiered bonuses.",
  "type": "object",
  "required": [
    "deal_metadata",
    "tour_financial_terms",
    "crossed_shows",
    "individual_shows",
    "schedules",
    "receipt_schedules"
  ],
  "properties": {
    "deal_metadata": {
      "type": "object",
      "description": "Basic information about the tour and parties",
      "required": ["artist_name", "promoter", "tour_name", "effective_date", "total_shows"],
      "properties": {
        "artist_name": {
          "type": "string",
          "minLength": 1,
          "description": "Artist or band name"
        },
        "artist_entity": {
          "type": "string",
          "description": "Legal entity providing artist services"
        },
        "promoter": {
          "type": "string",
          "minLength": 1,
          "description": "Promoter company name"
        },
        "tour_name": {
          "type": "string",
          "description": "Name of the tour"
        },
        "effective_date": {
          "type": "string",
          "format": "date",
          "description": "Contract execution date"
        },
        "tour_territory": {
          "type": "string",
          "description": "Geographic territory (e.g., North America)"
        },
        "total_shows": {
          "type": "integer",
          "minimum": 1,
          "description": "Total number of shows in tour"
        }
      },
      "additionalProperties": true
    },
    "tour_financial_terms": {
      "type": "object",
      "description": "Tour-level financial terms",
      "required": [
        "crossed_total_guarantee",
        "crossed_split_point",
        "artist_overage_share_percentage",
        "deposit_amount",
        "production_fee_per_show"
      ],
      "properties": {
        "crossed_total_guarantee": {
          "type": "number",
          "minimum": 0,
          "description": "Total guarantee for all crossed shows"
        },
        "crossed_split_point": {
          "type": "number",
          "minimum": 0,
          "description": "Aggregate revenue threshold before overage share applies"
        },
        "artist_overage_share_percentage": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Artist's percentage of Net Pot above split (e.g., 0.45 for 50% of 90%)"
        },
        "deposit_amount": {
          "type": "number",
          "minimum": 0,
          "description": "Upfront deposit against total guarantees"
        },
        "deposit_release_percentage": {
          "type": "number",
          "minimum": 0,
          "maximum": 1,
          "description": "Percentage of deposit released per show performed (typically 0.10)"
        },
        "production_fee_per_show": {
          "type": "number",
          "minimum": 0,
          "description": "Standard per-show production reimbursement amount"
        },
        "currency": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "default": "USD",
          "description": "ISO 4217 currency code"
        }
      },
      "additionalProperties": false
    },
    "crossed_shows": {
      "type": "array",
      "description": "Shows settled on cross-collateralized basis (aggregate calculation)",
      "items": {
        "$ref": "#/$defs/show_crossed"
      },
      "minItems": 1
    },
    "individual_shows": {
      "type": "array",
      "description": "Shows settled individually (per-show calculation)",
      "items": {
        "$ref": "#/$defs/show_individual"
      }
    },
    "schedules": {
      "type": "object",
      "description": "Time schedules (Layer 1) defining when events occur",
      "additionalProperties": {
        "$ref": "https://schemas.uta.com/common/schedule-patterns/1.0.0.json#/$defs/time_schedule"
      }
    },
    "receipt_schedules": {
      "type": "object",
      "description": "Receipt schedules (Layer 2) defining amounts and timing",
      "additionalProperties": {
        "$ref": "https://schemas.uta.com/common/receipt-schedule-patterns/1.0.0.json#/$defs/receipt_schedule"
      }
    }
  },
  "additionalProperties": true,
  "$defs": {
    "show_crossed": {
      "type": "object",
      "description": "Show in cross-collateralized group",
      "required": [
        "show_id",
        "date",
        "city",
        "venue",
        "guarantee_amount",
        "production_fee",
        "is_large_oo",
        "occurred",
        "settled"
      ],
      "properties": {
        "show_id": {
          "type": "string",
          "description": "Unique show identifier"
        },
        "date": {
          "type": "string",
          "format": "date",
          "description": "Show date"
        },
        "city": {
          "type": "string",
          "description": "City name"
        },
        "state": {
          "type": "string",
          "description": "State/province code"
        },
        "venue": {
          "type": "string",
          "description": "Venue name"
        },
        "guarantee_amount": {
          "type": "number",
          "minimum": 0,
          "description": "Per-show guarantee (part of crossed total)"
        },
        "production_fee": {
          "type": "number",
          "minimum": 0,
          "description": "Per-show production reimbursement amount"
        },
        "is_large_oo": {
          "type": "boolean",
          "description": "Whether show is Large O&O Amphitheater eligible for tiered bonuses"
        },
        "occurred": {
          "type": "boolean",
          "description": "Whether show has been performed"
        },
        "settled": {
          "type": "boolean",
          "description": "Whether show settlement complete with documented revenues/expenses"
        },
        "net_pot_revenues": {
          "type": ["number", "null"],
          "description": "Net Pot Revenues for this show (Pot Revenues - Pot Expenses)"
        },
        "tickets_sold": {
          "type": ["integer", "null"],
          "minimum": 0,
          "description": "Total tickets sold (not returned) - for bonus calculation"
        },
        "net_ticket_sales": {
          "type": ["number", "null"],
          "minimum": 0,
          "description": "Gross ticket sales less ticket charges - for bonus calculation"
        },
        "bonus_amount": {
          "type": ["number", "null"],
          "minimum": 0,
          "description": "Computed tiered bonus amount (if Large O&O and settled). Starts as null, populated by DSL computation."
        }
      },
      "additionalProperties": true
    },
    "show_individual": {
      "type": "object",
      "description": "Individually settled show",
      "required": [
        "show_id",
        "date",
        "city",
        "venue",
        "guarantee_amount",
        "production_fee",
        "split_point",
        "occurred",
        "settled"
      ],
      "properties": {
        "show_id": {
          "type": "string",
          "description": "Unique show identifier"
        },
        "date": {
          "type": "string",
          "format": "date",
          "description": "Show date"
        },
        "city": {
          "type": "string",
          "description": "City name"
        },
        "state": {
          "type": "string",
          "description": "State/province code"
        },
        "venue": {
          "type": "string",
          "description": "Venue name"
        },
        "guarantee_amount": {
          "type": "number",
          "minimum": 0,
          "description": "Per-show guarantee"
        },
        "production_fee": {
          "type": "number",
          "minimum": 0,
          "description": "Per-show production reimbursement amount"
        },
        "split_point": {
          "type": "number",
          "minimum": 0,
          "description": "Per-show revenue threshold before overage share applies"
        },
        "occurred": {
          "type": "boolean",
          "description": "Whether show has been performed"
        },
        "settled": {
          "type": "boolean",
          "description": "Whether show settlement complete"
        },
        "net_pot_revenues": {
          "type": ["number", "null"],
          "description": "Net Pot Revenues for this show (Pot Revenues - Pot Expenses)"
        },
        "show_contingent_amount": {
          "type": ["number", "null"],
          "minimum": 0,
          "description": "Computed per-show contingent amount (overage share). Starts as null, populated by DSL computation."
        }
      },
      "additionalProperties": true
    }
  }
}

JSON Instance Data

json
{
  "deal_metadata": {
    "artist_name": "Big Band",
    "artist_entity": "Big Band Loan Out, LLC",
    "promoter": "Huge Promoter Worldwide, Inc.",
    "tour_name": "Big Band Crossed Tour",
    "effective_date": "2024-07-11",
    "tour_territory": "North America",
    "total_shows": 42,
    "crossed_shows_count": 36,
    "individual_shows_count": 6
  },
  "tour_financial_terms": {
    "crossed_total_guarantee": 7405000,
    "crossed_split_point": 14227778,
    "artist_overage_share_percentage": 0.45,
    "deposit_amount": 861500,
    "deposit_release_percentage": 0.10,
    "production_fee_per_show": 15000,
    "currency": "USD"
  },
  "crossed_shows": [
    {
      "show_id": "crossed_01",
      "date": "2024-07-08",
      "city": "Green Bay",
      "state": "WI",
      "venue": "Green Bay Amphitheater",
      "guarantee_amount": 205000,
      "production_fee": 15000,
      "is_large_oo": false,
      "occurred": true,
      "settled": true,
      "net_pot_revenues": 425000,
      "tickets_sold": 9500,
      "net_ticket_sales": 380000,
      "bonus_amount": 0
    },
    {
      "show_id": "crossed_02",
      "date": "2024-07-13",
      "city": "Chigago",
      "state": "IL",
      "venue": "Chicago Amphitheatre",
      "guarantee_amount": 235000,
      "production_fee": 15000,
      "is_large_oo": true,
      "occurred": true,
      "settled": true,
      "net_pot_revenues": 685000,
      "tickets_sold": 14200,
      "net_ticket_sales": 520000,
      "bonus_amount": 45000
    },
    {
      "show_id": "crossed_03",
      "date": "2024-07-27",
      "city": "Buffalo",
      "state": "NY",
      "venue": "Buffalo Theater",
      "guarantee_amount": 265000,
      "production_fee": 15000,
      "is_large_oo": false,
      "occurred": true,
      "settled": false,
      "net_pot_revenues": null,
      "tickets_sold": null,
      "net_ticket_sales": null,
      "bonus_amount": null
    },
    {
      "show_id": "crossed_04",
      "date": "2024-08-04",
      "city": "Boston",
      "state": "MA",
      "venue": "Boston Center",
      "guarantee_amount": 235000,
      "production_fee": 15000,
      "is_large_oo": true,
      "occurred": false,
      "settled": false,
      "net_pot_revenues": null,
      "tickets_sold": null,
      "net_ticket_sales": null,
      "bonus_amount": null
    }
  ],
  "individual_shows": [
    {
      "show_id": "individual_01",
      "date": "2024-07-17",
      "city": "Columbia",
      "state": "MO",
      "venue": "Columbia Theatre",
      "guarantee_amount": 205000,
      "production_fee": 15000,
      "split_point": 227778,
      "occurred": true,
      "settled": true,
      "net_pot_revenues": 312000,
      "show_contingent_amount": 37899.90
    },
    {
      "show_id": "individual_02",
      "date": "2024-07-19",
      "city": "Rochester",
      "state": "NY",
      "venue": "Amphitheatre",
      "guarantee_amount": 185000,
      "production_fee": 15000,
      "split_point": 205556,
      "occurred": true,
      "settled": false,
      "net_pot_revenues": null,
      "show_contingent_amount": null
    }
  ],
  "schedules": {
    "show_earning_crossed_01": {
      "pattern": "event_triggered",
      "event": "show_occurred",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon show performance"
    },
    "show_earning_crossed_02": {
      "pattern": "event_triggered",
      "event": "show_occurred",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon show performance"
    },
    "show_earning_crossed_03": {
      "pattern": "event_triggered",
      "event": "show_occurred",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon show performance"
    },
    "show_earning_crossed_04": {
      "pattern": "event_triggered",
      "event": "show_occurred",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon show performance"
    },
    "show_earning_individual_01": {
      "pattern": "event_triggered",
      "event": "show_occurred",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon show performance"
    },
    "show_earning_individual_02": {
      "pattern": "event_triggered",
      "event": "show_occurred",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon show performance"
    },
    "show_contingent_earning_individual_01": {
      "pattern": "event_triggered",
      "event": "show_settled",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon settlement"
    },
    "show_contingent_earning_individual_02": {
      "pattern": "event_triggered",
      "event": "show_settled",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned upon settlement"
    },
    "crossed_contingent_earning": {
      "pattern": "event_triggered",
      "event": "crossed_all_settled",
      "time_after": 0,
      "time_unit": "days",
      "description": "Earned when all crossed shows settled"
    },
    "weekly_after_show": {
      "pattern": "periodic",
      "frequency": "weekly",
      "start_date": "{{show.date}}",
      "description": "Weekly payment cadence starting from show date"
    }
  },
  "receipt_schedules": {
    "show_guarantee_receipt_crossed_01": {
      "pattern": "event_installments",
      "total_amount": 205000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 205000,
          "timing": "weekly_after_show",
          "description": "Paid weekly after show performance"
        }
      ]
    },
    "show_guarantee_receipt_crossed_02": {
      "pattern": "event_installments",
      "total_amount": 235000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 235000,
          "timing": "weekly_after_show",
          "description": "Paid weekly after show performance"
        }
      ]
    },
    "show_guarantee_receipt_crossed_03": {
      "pattern": "event_installments",
      "total_amount": 265000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 265000,
          "timing": "weekly_after_show",
          "description": "Paid weekly after show performance"
        }
      ]
    },
    "show_guarantee_receipt_crossed_04": {
      "pattern": "event_installments",
      "total_amount": 235000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 235000,
          "timing": "weekly_after_show",
          "description": "Paid weekly after show performance"
        }
      ]
    },
    "show_production_receipt_crossed_01": {
      "pattern": "event_installments",
      "total_amount": 15000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 15000,
          "timing": "weekly_after_show",
          "description": "Production reimbursement paid weekly"
        }
      ]
    },
    "show_production_receipt_crossed_02": {
      "pattern": "event_installments",
      "total_amount": 15000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 15000,
          "timing": "weekly_after_show",
          "description": "Production reimbursement paid weekly"
        }
      ]
    },
    "show_production_receipt_crossed_03": {
      "pattern": "event_installments",
      "total_amount": 15000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 15000,
          "timing": "weekly_after_show",
          "description": "Production reimbursement paid weekly"
        }
      ]
    },
    "show_production_receipt_crossed_04": {
      "pattern": "event_installments",
      "total_amount": 15000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 15000,
          "timing": "weekly_after_show",
          "description": "Production reimbursement paid weekly"
        }
      ]
    },
    "bonus_receipt_crossed_02": {
      "pattern": "event_installments",
      "total_amount": 45000,
      "amount_method": "explicit",
      "description": "Cumulative bonus: $10k + $15k + $20k (all tiers achieved)",
      "installments": [
        {
          "amount": 45000,
          "timing": "weekly_after_show",
          "description": "Bonus paid with crossed contingent settlement"
        }
      ]
    },
    "show_guarantee_receipt_individual_01": {
      "pattern": "event_installments",
      "total_amount": 205000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 205000,
          "timing": "weekly_after_show",
          "description": "Paid weekly after show performance"
        }
      ]
    },
    "show_guarantee_receipt_individual_02": {
      "pattern": "event_installments",
      "total_amount": 185000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 185000,
          "timing": "weekly_after_show",
          "description": "Paid weekly after show performance"
        }
      ]
    },
    "show_production_receipt_individual_01": {
      "pattern": "event_installments",
      "total_amount": 15000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 15000,
          "timing": "weekly_after_show",
          "description": "Production reimbursement paid weekly"
        }
      ]
    },
    "show_production_receipt_individual_02": {
      "pattern": "event_installments",
      "total_amount": 15000,
      "amount_method": "explicit",
      "installments": [
        {
          "amount": 15000,
          "timing": "weekly_after_show",
          "description": "Production reimbursement paid weekly"
        }
      ]
    },
    "show_contingent_receipt_individual_01": {
      "pattern": "event_installments",
      "total_amount": 37899,
      "amount_method": "explicit",
      "description": "Individual show overage: (312000 - 227778) * 0.45 = 37899",
      "installments": [
        {
          "amount": 37899,
          "timing": "weekly_after_show",
          "description": "Contingent paid weekly after show settlement"
        }
      ]
    },
    "crossed_contingent_receipt": {
      "pattern": "event_installments",
      "total_amount": null,
      "amount_method": "percentage",
      "description": "Aggregate crossed contingent paid in two stages",
      "installments": [
        {
          "percentage": 90,
          "timing": "preliminary_settlement",
          "description": "90% paid 14 days after final crossed show"
        },
        {
          "percentage": 10,
          "timing": "final_settlement",
          "description": "10% paid 30 days after final crossed show"
        }
      ]
    }
  },
  "_calculation_notes": {
    "computation_model": "Computed fields (bonus_amount, show_contingent_amount) start as null in JSON. DSL computations within for_each blocks populate these fields during evaluation. Aggregate computations then read these populated values using sum(collection[*].field).",
    "crossed_show_02_bonus": "14,200 tickets >= 15,000 threshold AND $520k >= $505k threshold = $45k cumulative ($10k + $15k + $20k). Computed by DSL, stored in show.bonus_amount.",
    "individual_show_01_contingent": "Net Pot $312k - Split Point $227,778 = $84,222 overage × 45% = $37,899.90. Computed by DSL, stored in show.show_contingent_amount.",
    "crossed_contingent_pending": "Awaiting settlement of all 36 crossed shows to calculate aggregate Net Pot and final overage amount"
  }
}

Confidential. For internal use only.