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
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
{
"$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
{
"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"
}
}