This appendix is written as a “walkthrough” so a reader can follow how each deal works from: authoring → schema → clause templates → fixtures → evaluator verification → codegen.
Last updated: 2026-01-26
JSON Schema dialect: All schemas below are draft 2020-12 (
$schema: https://json-schema.org/draft/2020-12/schema). Deal Foundry supports both Core-only and Validation schemas.
1) Endorsement (Base Fee + Option Term)
How it works (plain narrative)
This deal pays a base talent fee over an input-defined term, typically via quarterly installments, and optionally pays an option term fee if an option is exercised. The key point is that the term is instance data, not hardcoded into the model; the model defines the structure (what fields exist, how obligations are scheduled, how contract text is rendered).
DealModel DSL (excerpt)
The DSL includes clause templates for contract generation and ComputationSpecs for outputs. Negotiated numbers remain instance inputs.
model { deal_type: "endorsement_v1", version: 1.0.0, primitive_catalog_version: 1.0.0 }
workflow {
allowed { DRAFT; NEGOTIATION; BOOKED; CANCELLED; }
mapping {
DRAFT -> draft;
NEGOTIATION -> negotiating;
BOOKED -> closed cp_ready: true;
CANCELLED -> cancelled;
}
}
computations {
output base_fee_total {
type: money
display: "Base Fee Total"
description: "Total base fee amount."
depends_on_inputs: ["financial.baseFee.amount"]
}
output option_fee_total {
type: money
display: "Option Term Fee Total"
description: "Option fee amount when option is exercised; otherwise zero."
depends_on_inputs: ["financial.optionTermFee.enabled","financial.optionTermFee.amount"]
}
}
clause {
name: base_fee
kind: guarantee
description: "Base fee for services over term"
template: """
Base Talent Fee. Brand shall pay Talent {financial.baseFee.amount.amount} {currency}
for services during the Term from {term.startDate} to {term.endDate}.
Payable in equal {financial.baseFee.installmentFrequency} installments; first due {financial.baseFee.firstDueDate},
final due no later than {financial.baseFee.lastDueDate}.
"""
}
clause {
name: option_term_fee
kind: contingent
description: "Fee payable if option exercised"
template: """
Option Term Fee. If option exercised, Brand shall pay Talent {financial.optionTermFee.amount.amount} {currency}.
{financial.optionTermFee.tranchePct1} due {financial.optionTermFee.tranche1DueDate} and
{financial.optionTermFee.tranchePct2} due {financial.optionTermFee.tranche2DueDate}.
"""
}Standalone input schema (full JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "deals/endorsement_v1/input.schema.json",
"title": "Endorsement v1 – Input Schema",
"type": "object",
"required": [
"currency",
"workflowState",
"term",
"financial",
"nonFinancialClauses"
],
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"default": "USD"
},
"workflowState": {
"type": "string",
"enum": [
"DRAFT",
"NEGOTIATION",
"BOOKED",
"CANCELLED"
]
},
"term": {
"type": "object",
"required": [
"effectiveDate",
"startDate",
"endDate"
],
"properties": {
"effectiveDate": {
"type": "string",
"format": "date"
},
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
}
},
"additionalProperties": false
},
"financial": {
"type": "object",
"required": [
"baseFee",
"optionTermFee"
],
"properties": {
"baseFee": {
"type": "object",
"required": [
"amount",
"installmentFrequency",
"installmentLagDays",
"firstDueDate",
"lastDueDate"
],
"properties": {
"amount": {
"$ref": "#/$defs/Money"
},
"installmentFrequency": {
"type": "string",
"enum": [
"quarterly"
]
},
"installmentLagDays": {
"type": "integer",
"minimum": 0,
"maximum": 365,
"default": 30
},
"firstDueDate": {
"type": "string",
"format": "date"
},
"lastDueDate": {
"type": "string",
"format": "date"
}
},
"additionalProperties": false
},
"optionTermFee": {
"type": "object",
"required": [
"enabled"
],
"properties": {
"enabled": {
"type": "boolean",
"default": false
},
"amount": {
"$ref": "#/$defs/Money"
},
"optionStartDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"tranchePct1": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.5
},
"tranchePct2": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.5
},
"tranche1DueDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"tranche2DueDate": {
"type": [
"string",
"null"
],
"format": "date"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"nonFinancialClauses": {
"type": "array",
"items": {
"$ref": "#/$defs/NonFinancialClause"
},
"default": []
}
},
"$defs": {
"Money": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$",
"description": "Decimal string (no floats)."
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code."
}
},
"additionalProperties": false
},
"NonFinancialClause": {
"type": "object",
"required": [
"clauseType",
"title",
"text"
],
"properties": {
"clauseType": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"text": {
"type": "string",
"minLength": 1
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"default": []
}
},
"additionalProperties": true
}
},
"additionalProperties": false
}Example instance payload (your deal values)
{
"currency":"USD",
"workflowState":"BOOKED",
"term":{ "effectiveDate":"2022-09-23","startDate":"2022-09-22","endDate":"2025-09-23" },
"financial":{
"baseFee":{
"amount":{"amount":"2100000.00","currency":"USD"},
"installmentFrequency":"quarterly",
"installmentLagDays":30,
"firstDueDate":"2022-10-23",
"lastDueDate":"2025-06-23"
},
"optionTermFee":{
"enabled":false,
"amount":{"amount":"200000.00","currency":"USD"},
"optionStartDate":null,
"tranchePct1":0.5,
"tranchePct2":0.5,
"tranche1DueDate":null,
"tranche2DueDate":null
}
},
"nonFinancialClauses":[
{"clauseType":"exclusivity","title":"Exclusivity","text":"Talent shall be exclusive to BrandX in the category during the Term.","tags":["endorsement"]},
{"clauseType":"rights_assignment","title":"Rights Assignment","text":"Talent assigns necessary rights for campaign exploitation during the Term.","tags":["endorsement"]}
]
}Contract PDF generation (quick view)
Deal Foundry stores clause templates and/or a contract.template.md that binds schema paths. A downstream renderer produces PDF via Markdown→HTML→PDF or Pandoc.
2) Touring (GBOR/NBOR/Tax/Split Point Variants)
How it works (plain narrative)
Touring deals are settlement math: compute GBOR from tiers, compute tax and NBOR, apply a variant (versus gross/net, plus deal, standard split point), then layer bonus and commission. The deal model captures raw ticket tiers and the parameters; fixtures lock the math; an authoring evaluator verifies it.
DealModel DSL (excerpt)
model { deal_type: "touring_calcs_v1", version: 1.0.0, primitive_catalog_version: 1.0.0 }
computations {
metric gbor {
type: money
display: "GBOR"
description: "GBOR = Σ(quantity × price) across tiers."
depends_on_inputs: ["ticketing.tiers.quantity","ticketing.tiers.price"]
}
metric salesTax {
type: money
display: "Sales Tax"
description: "Divider: Gross − Gross/(1+TaxRate). Multiplier: Gross×TaxRate."
depends_on_inputs: ["deductions.taxMethod","deductions.taxRate","ticketing.tiers.quantity","ticketing.tiers.price"]
}
metric nbor {
type: money
display: "NBOR"
description: "NBOR = GBOR − (SalesTax + FacilityFees)."
depends_on_inputs: ["deductions.facilityFees","deductions.taxMethod","deductions.taxRate","ticketing.tiers.quantity","ticketing.tiers.price"]
}
metric payoutBase {
type: money
display: "Payout Base"
description: "Variant-dependent payout formula (plus / versus gross / versus net)."
depends_on_inputs: ["dealVariant","terms.guarantee","terms.artistPct","expenses.totalExpenses"]
depends_on_metrics: ["gbor","salesTax","nbor"]
}
output walkout {
type: money
display: "Walkout"
description: "Walkout after bonus and commission."
depends_on_inputs: ["terms.commissionPct"]
depends_on_metrics: ["payoutBase"]
}
}Standalone input schema (full JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "deals/touring_calcs_v1/input.schema.json",
"title": "Touring Calcs v1 – Input Schema",
"type": "object",
"required": [
"currency",
"workflowState",
"dealVariant",
"ticketing",
"deductions",
"expenses",
"terms"
],
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"default": "USD"
},
"workflowState": {
"type": "string",
"enum": [
"DRAFT",
"OFFER_OUT",
"HOLD",
"BOOKED",
"CANCELLED"
]
},
"dealVariant": {
"type": "string",
"enum": [
"versus_gross",
"versus_net",
"plus_deal",
"standard_split_point"
]
},
"ticketing": {
"type": "object",
"required": [
"tiers"
],
"properties": {
"tiers": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"name",
"quantity",
"compsKills",
"price"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"quantity": {
"type": "integer",
"minimum": 0
},
"compsKills": {
"type": "integer",
"minimum": 0,
"default": 0
},
"price": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"deductions": {
"type": "object",
"required": [
"taxMethod",
"taxRate",
"facilityFees"
],
"properties": {
"taxMethod": {
"type": "string",
"enum": [
"divider",
"multiplier"
]
},
"taxRate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"facilityFees": {
"$ref": "#/$defs/Money"
}
},
"additionalProperties": false
},
"expenses": {
"type": "object",
"required": [
"totalExpenses"
],
"properties": {
"totalExpenses": {
"$ref": "#/$defs/Money"
}
},
"additionalProperties": false
},
"terms": {
"type": "object",
"required": [
"guarantee",
"artistPct",
"bonusPerPaidTicket",
"bonusCapTickets",
"commissionPct"
],
"properties": {
"guarantee": {
"$ref": "#/$defs/Money"
},
"artistPct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"bonusPerPaidTicket": {
"$ref": "#/$defs/Money"
},
"bonusCapTickets": {
"type": "integer",
"minimum": 0
},
"commissionPct": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.0
},
"promoterProfitPct": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.0
},
"artistOveragePct": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
}
},
"additionalProperties": false
}
},
"$defs": {
"Money": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$",
"description": "Decimal string (no floats)."
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Example instance payload (your touring values)
{
"currency":"USD",
"workflowState":"BOOKED",
"dealVariant":"versus_net",
"ticketing":{
"tiers":[
{"name":"Reserved 1","quantity":558,"compsKills":20,"price":59.50},
{"name":"Reserved 2","quantity":1988,"compsKills":30,"price":49.50},
{"name":"Reserved 3","quantity":262,"compsKills":0,"price":39.50},
{"name":"Reserved 3 (low)","quantity":12,"compsKills":0,"price":29.50},
{"name":"VIP 1","quantity":31,"compsKills":0,"price":159.50},
{"name":"VIP 2","quantity":31,"compsKills":0,"price":119.50}
]
},
"deductions":{"taxMethod":"divider","taxRate":0.06,"facilityFees":{"amount":"0.00","currency":"USD"}},
"expenses":{"totalExpenses":{"amount":"59279.44","currency":"USD"}},
"terms":{
"guarantee":{"amount":"50000.00","currency":"USD"},
"artistPct":0.90,
"bonusPerPaidTicket":{"amount":"1.00","currency":"USD"},
"bonusCapTickets":2758,
"commissionPct":0.0725,
"promoterProfitPct":0.0,
"artistOveragePct":null
}
}3) Film (Guarantee + Backend Ladder + Fork)
How it works (plain narrative)
This deal combines a fixed guarantee/overage structure with long-running contingent backend. Evidence (AGP and box office) drives bonus ladders and participation caps, with a fork to SVOD-exclusive “in lieu” logic.
Standalone input schema (full JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "deals/film_backend_v1/input.schema.json",
"title": "Film Backend v1 – Input Schema",
"type": "object",
"required": [
"currency",
"workflowState",
"guarantee",
"term",
"backend",
"release",
"nonFinancialClauses"
],
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"default": "USD"
},
"workflowState": {
"type": "string",
"enum": [
"DRAFT",
"NEGOTIATION",
"SIGNED",
"CANCELLED"
]
},
"guarantee": {
"$ref": "#/$defs/Money"
},
"term": {
"type": "object",
"required": [
"start",
"end",
"weeklyRate",
"dailyRate",
"extraWeeks",
"extraDays"
],
"properties": {
"start": {
"type": "string",
"format": "date"
},
"end": {
"type": "string",
"format": "date"
},
"weeklyRate": {
"$ref": "#/$defs/Money"
},
"dailyRate": {
"$ref": "#/$defs/Money"
},
"extraWeeks": {
"type": "integer",
"minimum": 0,
"default": 0
},
"extraDays": {
"type": "integer",
"minimum": 0,
"default": 0
}
},
"additionalProperties": false
},
"backend": {
"type": "object",
"required": [
"participationPct",
"capPctOfAGP",
"negativeCost",
"pandA",
"milestoneIncrement",
"milestoneBonus",
"svodBonus",
"dayAndDateAdvance"
],
"properties": {
"participationPct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"capPctOfAGP": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"negativeCost": {
"$ref": "#/$defs/Money"
},
"pandA": {
"$ref": "#/$defs/Money"
},
"milestoneIncrement": {
"$ref": "#/$defs/Money"
},
"milestoneBonus": {
"$ref": "#/$defs/Money"
},
"svodBonus": {
"$ref": "#/$defs/Money"
},
"dayAndDateAdvance": {
"$ref": "#/$defs/Money"
}
},
"additionalProperties": false
},
"release": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"enum": [
"theatrical",
"day_and_date",
"svod_exclusive"
]
}
},
"additionalProperties": false
},
"nonFinancialClauses": {
"type": "array",
"items": {
"$ref": "#/$defs/NonFinancialClause"
},
"default": []
}
},
"$defs": {
"Money": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?$",
"description": "Decimal string (no floats)."
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code."
}
},
"additionalProperties": false
},
"NonFinancialClause": {
"type": "object",
"required": [
"clauseType",
"title",
"text"
],
"properties": {
"clauseType": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"text": {
"type": "string",
"minLength": 1
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"default": []
}
},
"additionalProperties": true
}
},
"additionalProperties": false
}Appendix: why the schemas “look official”
These are standard JSON Schema documents (draft 2020-12), with:
- required fields
- enums
- type bounds (min/max)
- date formats
- decimal strings for Money
Deal Foundry bundles $ref for production validation and codegen, validating against the 2020-12 meta-schema and supporting both Core and Validation vocabularies.