{
  "version": 3,
  "domains": [
    "route",
    "fleet",
    "policy",
    "program",
    "lounge",
    "codes"
  ],
  "stated_date_kinds": [
    "announcement_date",
    "schedule_start",
    "month",
    "report_date",
    "effective_date"
  ],
  "predicates": [
    {
      "id": "route.service_announced",
      "domain": "route",
      "fact_class": 11,
      "subject_type": "route",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "announcement_date",
      "phrase": "Service on {subject} begins {start}[, {weekly} times a week][, on the {aircraft}]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "start",
          "announced_on"
        ],
        "properties": {
          "start": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "weekly": {
            "type": "integer",
            "minimum": 0
          },
          "aircraft": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "announced_on": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        }
      },
      "entity_fields": {
        "aircraft": "type"
      }
    },
    {
      "id": "route.service_scheduled",
      "domain": "route",
      "fact_class": 11,
      "subject_type": "route",
      "datatype": "json",
      "identity_fields": [
        "carrier",
        "direction"
      ],
      "stated_date": "schedule_start",
      "phrase": "{carrier} schedules {direction}[ as flight {flight_numbers}][ on {days_of_week}][ on the {aircraft_type}][, seating {seats}]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "carrier",
          "direction"
        ],
        "properties": {
          "carrier": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "direction": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "flight_numbers": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "days_of_week": {
            "type": "array",
            "items": {
              "type": "integer",
              "minimum": 1,
              "maximum": 7
            }
          },
          "aircraft_type": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "seats": {
            "type": "object",
            "additionalProperties": false,
            "required": [],
            "properties": {
              "first": {
                "type": "integer",
                "minimum": 0
              },
              "business": {
                "type": "integer",
                "minimum": 0
              },
              "coach": {
                "type": "integer",
                "minimum": 0
              }
            }
          }
        }
      },
      "entity_fields": {
        "carrier": "airline",
        "direction": "route",
        "aircraft_type": "type"
      }
    },
    {
      "id": "route.service_flown",
      "domain": "route",
      "fact_class": 11,
      "subject_type": "route",
      "datatype": "json",
      "identity_fields": [
        "carrier",
        "direction",
        "month",
        "aircraft_type",
        "service_class"
      ],
      "stated_date": "month",
      "phrase": "In {month}, {carrier} flew {direction}[ in BTS service class {service_class}][ on BTS aircraft type {aircraft_type}][ - {departures_performed} departures][, {seats} seats][, {passengers} passengers]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "carrier",
          "direction",
          "month",
          "aircraft_type",
          "service_class"
        ],
        "properties": {
          "carrier": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "direction": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "month": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$"
          },
          "departures_performed": {
            "type": "integer",
            "minimum": 0
          },
          "seats": {
            "type": "integer",
            "minimum": 0
          },
          "passengers": {
            "type": "integer",
            "minimum": 0
          },
          "aircraft_type": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "service_class": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          }
        }
      },
      "entity_fields": {
        "carrier": "airline",
        "direction": "route"
      }
    },
    {
      "id": "route.service_ended",
      "domain": "route",
      "fact_class": 11,
      "subject_type": "route",
      "datatype": "date",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "Service on {subject} ended {date}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "date"
        ],
        "properties": {
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        }
      }
    },
    {
      "id": "route.seasonal",
      "domain": "route",
      "fact_class": 11,
      "subject_type": "route",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} is seasonal, flown from {from} to {to}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "from",
          "to"
        ],
        "properties": {
          "from": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "to": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        }
      }
    },
    {
      "id": "route.hub",
      "domain": "route",
      "fact_class": 11,
      "subject_type": "airline",
      "datatype": "entity",
      "identity_fields": [
        "airport"
      ],
      "stated_date": "effective_date",
      "phrase": "{subject} runs a hub at {airport}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "airport"
        ],
        "properties": {
          "airport": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          }
        }
      },
      "entity_fields": {
        "airport": "airport"
      }
    },
    {
      "id": "fleet.count_in_service",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "airline",
      "datatype": "int",
      "identity_fields": [
        "type",
        "variant"
      ],
      "stated_date": "report_date",
      "phrase": "{subject} operated {n} {variant} aircraft",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "type",
          "variant",
          "n"
        ],
        "properties": {
          "type": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "variant": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "n": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "aircraft",
      "entity_fields": {
        "type": "type"
      }
    },
    {
      "id": "fleet.orders_firm",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "airline",
      "datatype": "int",
      "identity_fields": [
        "type",
        "variant"
      ],
      "stated_date": "report_date",
      "phrase": "{subject} held firm orders for {n} {variant} aircraft",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "type",
          "variant",
          "n"
        ],
        "properties": {
          "type": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "variant": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "n": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "aircraft",
      "entity_fields": {
        "type": "type"
      }
    },
    {
      "id": "fleet.expected_deliveries",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "airline",
      "datatype": "int",
      "identity_fields": [
        "type",
        "variant",
        "year"
      ],
      "stated_date": "report_date",
      "phrase": "{subject} expected {n} {variant} deliveries in {year}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "type",
          "variant",
          "year",
          "n"
        ],
        "properties": {
          "type": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "variant": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "year": {
            "type": "integer",
            "minimum": 2000,
            "maximum": 2100
          },
          "n": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "aircraft",
      "entity_fields": {
        "type": "type"
      }
    },
    {
      "id": "fleet.total_mainline",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "airline",
      "datatype": "int",
      "identity_fields": [],
      "stated_date": "report_date",
      "phrase": "{subject} operated {n} mainline aircraft",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "n"
        ],
        "properties": {
          "n": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "aircraft"
    },
    {
      "id": "fleet.average_age_years",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "airline",
      "datatype": "decimal",
      "identity_fields": [],
      "stated_date": "report_date",
      "phrase": "The {subject} mainline fleet averaged {years} years old",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "years"
        ],
        "properties": {
          "years": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "years"
    },
    {
      "id": "fleet.subfleet_config",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "subfleet",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "The {subject} cabin seats[ {polaris} in Polaris][, {premium_plus} in Premium Plus][, {economy_plus} in Economy Plus][, {economy} in economy][ - {total} seats in all][, {premium_total} of them premium][, including {polaris_studio} Polaris Studio suites][; it first flew internationally on {first_international_route}][ on {first_international_flight_date}]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [],
        "properties": {
          "polaris": {
            "type": "integer",
            "minimum": 0
          },
          "premium_plus": {
            "type": "integer",
            "minimum": 0
          },
          "economy_plus": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "economy": {
            "type": "integer",
            "minimum": 0
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "premium_total": {
            "type": "integer",
            "minimum": 0
          },
          "has_polaris_studio": {
            "type": "boolean"
          },
          "polaris_studio": {
            "type": "integer",
            "minimum": 0
          },
          "first_international_route": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "first_international_flight_date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          }
        }
      },
      "unit": "seats"
    },
    {
      "id": "fleet.of_type",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "subfleet",
      "datatype": "entity",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} is a {type}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          }
        }
      },
      "entity_fields": {
        "type": "type"
      }
    },
    {
      "id": "fleet.has_polaris",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "subfleet",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} has a Polaris cabin: {has_polaris}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "has_polaris"
        ],
        "properties": {
          "has_polaris": {
            "type": "boolean"
          }
        }
      }
    },
    {
      "id": "fleet.wifi_provider",
      "domain": "fleet",
      "fact_class": 14,
      "subject_type": "subfleet",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} carries {provider} wi-fi[ ({status})][, installed on {fleet_installed} of {fleet_total} aircraft][, first flown on a widebody on {first_widebody_flight}]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "provider"
        ],
        "properties": {
          "provider": {
            "type": "string",
            "minLength": 1
          },
          "status": {
            "type": "string",
            "minLength": 1
          },
          "first_widebody_flight": {
            "type": "string",
            "minLength": 1
          },
          "aircraft": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "fleet_installed": {
            "type": "integer",
            "minimum": 0
          },
          "fleet_total": {
            "type": "integer",
            "minimum": 0
          }
        }
      }
    },
    {
      "id": "fleet.tail_subfleet",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "tail",
      "datatype": "entity",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} belongs to the {subfleet} subfleet",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "subfleet"
        ],
        "properties": {
          "subfleet": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          }
        }
      },
      "entity_fields": {
        "subfleet": "subfleet"
      }
    },
    {
      "id": "fleet.tail_registrant",
      "domain": "fleet",
      "fact_class": 10,
      "subject_type": "tail",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} is registered to {name}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "policy.checked_bag_fee",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "decimal",
      "identity_fields": [
        "market",
        "bag_n",
        "channel"
      ],
      "stated_date": "effective_date",
      "phrase": "United charges {usd} for checked bag {bag_n} on a {market} itinerary ({channel})",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "bag_n",
          "channel",
          "usd"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "bag_n": {
            "type": "integer",
            "minimum": 1
          },
          "channel": {
            "$comment": "united.com Basic Economy: \"bag fees start at $45 if you prepay, $50 in the lobby and $75 at the gate\" — three prices, so three channels. `airport` is the lobby counter.",
            "type": "string",
            "enum": [
              "airport",
              "prepaid",
              "gate"
            ]
          },
          "usd": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd",
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.checked_bag_allowance",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "json",
      "identity_fields": [
        "market",
        "who",
        "fare_family"
      ],
      "stated_date": "effective_date",
      "phrase": "{who} on a {fare_family} fare may check[ {bags}] bags on a {market} itinerary[, up to {weight_lb} lb each]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "who",
          "fare_family"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "who": {
            "type": "string",
            "enum": [
              "general",
              "premier-silver",
              "premier-gold",
              "premier-platinum",
              "premier-1k",
              "star-alliance-gold",
              "cardholder",
              "military",
              "united-first",
              "united-business",
              "united-polaris"
            ]
          },
          "bags": {
            "type": "integer",
            "minimum": 0
          },
          "weight_lb": {
            "type": "integer",
            "minimum": 0
          },
          "fare_family": {
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award",
              "any"
            ]
          }
        }
      },
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.carry_on_allowance",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "market",
        "fare_family"
      ],
      "stated_date": "effective_date",
      "phrase": "On a {market} {fare_family} fare the carry-on allowance is {item}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "fare_family",
          "item"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "fare_family": {
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award"
            ]
          },
          "item": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.basic_economy_rule",
      "domain": "policy",
      "fact_class": 2,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "market",
        "aspect"
      ],
      "stated_date": "effective_date",
      "phrase": "On a {market} Basic Economy fare, {aspect}: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "aspect",
          "rule"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "aspect": {
            "type": "string",
            "enum": [
              "seat_selection",
              "carry_on",
              "personal_item",
              "gate_check_fee",
              "checked_bag",
              "changes",
              "refunds",
              "upgrades",
              "mileage_earn",
              "premier_qualifying",
              "boarding_group",
              "standby",
              "same_day_change"
            ]
          },
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.change_fee",
      "domain": "policy",
      "fact_class": 3,
      "subject_type": "policy",
      "datatype": "decimal",
      "identity_fields": [
        "market",
        "fare_family"
      ],
      "stated_date": "effective_date",
      "phrase": "United charges {usd} to change a {fare_family} fare on a {market} itinerary",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "fare_family",
          "usd"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "fare_family": {
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award"
            ]
          },
          "usd": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd",
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.refund_rule",
      "domain": "policy",
      "fact_class": 3,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "fare_family"
      ],
      "stated_date": "effective_date",
      "phrase": "Refunds on a {fare_family} fare: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "fare_family",
          "rule"
        ],
        "properties": {
          "fare_family": {
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award",
              "base",
              "standard",
              "flexible"
            ]
          },
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "policy.dot_refund_threshold",
      "domain": "policy",
      "fact_class": 3,
      "subject_type": "policy",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "US DOT requires a refund after a {domestic_h}-hour domestic delay or a {intl_h}-hour international delay",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "domestic_h",
          "intl_h"
        ],
        "properties": {
          "domestic_h": {
            "type": "number"
          },
          "intl_h": {
            "type": "number"
          }
        }
      },
      "unit": "hours"
    },
    {
      "id": "policy.denied_boarding_cap",
      "domain": "policy",
      "fact_class": 15,
      "subject_type": "policy",
      "datatype": "decimal",
      "identity_fields": [
        "band"
      ],
      "stated_date": "effective_date",
      "phrase": "Denied-boarding compensation in the {band} band is capped at {usd}[ ({pct_of_fare} of the fare)]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "band",
          "usd"
        ],
        "properties": {
          "band": {
            "type": "string",
            "enum": [
              "under_1h",
              "domestic_1_2h",
              "domestic_over_2h",
              "intl_1_4h",
              "intl_over_4h"
            ]
          },
          "usd": {
            "type": "number",
            "minimum": 0
          },
          "pct_of_fare": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd"
    },
    {
      "id": "policy.same_day_change_fee",
      "domain": "policy",
      "fact_class": 13,
      "subject_type": "policy",
      "datatype": "decimal",
      "identity_fields": [
        "tier"
      ],
      "stated_date": "effective_date",
      "phrase": "A same-day change costs {usd} for {tier} members",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tier",
          "usd"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "enum": [
              "general",
              "premier_silver",
              "premier_gold",
              "premier_platinum",
              "premier_1k"
            ]
          },
          "usd": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd"
    },
    {
      "id": "policy.standby_rule",
      "domain": "policy",
      "fact_class": 13,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "tier",
        "fare_family"
      ],
      "stated_date": "effective_date",
      "phrase": "Standby for {tier} members on a {fare_family} fare: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tier",
          "fare_family",
          "rule"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "enum": [
              "any",
              "general",
              "premier_silver",
              "premier_gold",
              "premier_platinum",
              "premier_1k"
            ]
          },
          "rule": {
            "type": "string",
            "minLength": 1
          },
          "fare_family": {
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award",
              "any"
            ]
          }
        }
      }
    },
    {
      "id": "policy.credit_expiry",
      "domain": "policy",
      "fact_class": 3,
      "subject_type": "policy",
      "datatype": "int",
      "identity_fields": [
        "kind"
      ],
      "stated_date": "effective_date",
      "phrase": "A {kind} credit expires {months} months after it is issued",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "kind",
          "months"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "future_flight_credit",
              "electronic_travel_certificate",
              "flight_credit"
            ]
          },
          "months": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "months"
    },
    {
      "id": "policy.pet_fee",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "decimal",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "United charges {usd} to carry a pet in the cabin",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "usd"
        ],
        "properties": {
          "usd": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd"
    },
    {
      "id": "policy.unaccompanied_minor_fee",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "decimal",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "United charges {usd} for an unaccompanied minor",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "usd"
        ],
        "properties": {
          "usd": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd"
    },
    {
      "id": "policy.no_show_rule",
      "domain": "policy",
      "fact_class": 3,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "If you do not show up: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rule"
        ],
        "properties": {
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "policy.seat_fee",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "json",
      "identity_fields": [
        "market",
        "product"
      ],
      "stated_date": "effective_date",
      "phrase": "A {product} seat on a {market} itinerary costs {usd_from} to {usd_to}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "product",
          "usd_from",
          "usd_to"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "product": {
            "type": "string",
            "enum": [
              "economy_plus",
              "preferred"
            ]
          },
          "usd_from": {
            "type": "number",
            "minimum": 0
          },
          "usd_to": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd",
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.ancillary_refund_rule",
      "domain": "policy",
      "fact_class": 3,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "product"
      ],
      "stated_date": "effective_date",
      "phrase": "Refunds for {product}: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "product",
          "rule"
        ],
        "properties": {
          "product": {
            "type": "string",
            "enum": [
              "economy-plus-seat",
              "preferred-seat",
              "checked-bag",
              "carry-on",
              "pet",
              "wifi",
              "same-day-change",
              "premier-access",
              "upgrade"
            ]
          },
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "policy.bag_acceptance_cutoff",
      "domain": "policy",
      "fact_class": 1,
      "subject_type": "policy",
      "datatype": "int",
      "identity_fields": [
        "market",
        "airport"
      ],
      "stated_date": "effective_date",
      "phrase": "Checked bags close {minutes} minutes before departure at {airport} on a {market} itinerary[ - {rule}]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "market",
          "airport",
          "minutes"
        ],
        "properties": {
          "market": {
            "type": "string",
            "enum": [
              "domestic",
              "transatlantic",
              "transpacific",
              "canada",
              "mexico-caribbean",
              "south-america",
              "middle-east-africa"
            ]
          },
          "airport": {
            "$comment": "null means the market default. Contract of Carriage Rule 5 D) 2) a) sets 75 minutes for every non-stop international flight, then carves out 60 in the Philippines and 90 for Micronesia, the Marshall Islands, the N. Mariana Islands, Palau, Canada, St. Thomas, Accra, Lagos and Tel Aviv — so the market alone cannot separate the carve-outs from the rule they except.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[a-z]{3}$"
          },
          "minutes": {
            "type": "integer",
            "minimum": 0
          },
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "unit": "minutes",
      "entity_fields": {
        "market": "market"
      }
    },
    {
      "id": "policy.irrops_care",
      "domain": "policy",
      "fact_class": 15,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "kind"
      ],
      "stated_date": "effective_date",
      "phrase": "When a {kind} disruption hits: {rule}[ (controllable delays only: {controllable_only})][, from {threshold_h} hours]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "kind",
          "rule"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "lodging",
              "meal",
              "ground_transport",
              "rebooking"
            ]
          },
          "rule": {
            "type": "string",
            "minLength": 1
          },
          "controllable_only": {
            "type": "boolean"
          },
          "threshold_h": {
            "type": "number",
            "minimum": 0
          }
        }
      }
    },
    {
      "id": "policy.downgrade_compensation",
      "domain": "policy",
      "fact_class": 15,
      "subject_type": "policy",
      "datatype": "string",
      "identity_fields": [
        "fare_type"
      ],
      "stated_date": "effective_date",
      "phrase": "A downgrade on a {fare_type} fare: {rule}[ ({pct_of_prorated_fare} of the prorated fare)]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "fare_type",
          "rule"
        ],
        "properties": {
          "fare_type": {
            "type": "string",
            "enum": [
              "unrestricted_premium",
              "special_restricted",
              "paid_upgrade",
              "mileage_upgrade",
              "award"
            ]
          },
          "rule": {
            "type": "string",
            "minLength": 1
          },
          "pct_of_prorated_fare": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        }
      }
    },
    {
      "id": "program.premier_threshold",
      "domain": "program",
      "fact_class": 7,
      "subject_type": "tier",
      "datatype": "json",
      "identity_fields": [
        "tier"
      ],
      "stated_date": "effective_date",
      "phrase": "The {tier} threshold is {pqp} PQP[ and {pqf} PQF][, at least {min_ua_flights} of them United flights][ (PQP only: {pqp_only})]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tier",
          "pqp"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "pqp": {
            "type": "integer",
            "minimum": 0
          },
          "pqf": {
            "type": "integer",
            "minimum": 0
          },
          "pqp_only": {
            "type": "integer",
            "minimum": 0
          },
          "min_ua_flights": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "entity_fields": {
        "tier": "tier"
      }
    },
    {
      "id": "program.tier_benefit",
      "domain": "program",
      "fact_class": 7,
      "subject_type": "tier",
      "datatype": "json",
      "identity_fields": [
        "tier",
        "benefit"
      ],
      "stated_date": "effective_date",
      "phrase": "{tier} members get {benefit}: {value}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tier",
          "benefit",
          "value"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "benefit": {
            "type": "string",
            "enum": [
              "checked_bags_free",
              "companion_checked_bags",
              "economy_plus_at_booking",
              "complimentary_premier_upgrade",
              "cpu_optout",
              "upgrade_priority",
              "pluspoints",
              "same_day_change",
              "standby",
              "priority_checkin",
              "priority_boarding",
              "priority_baggage",
              "award_fee_waiver",
              "star_alliance_gold",
              "united_club_passes"
            ]
          },
          "value": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "entity_fields": {
        "tier": "tier"
      }
    },
    {
      "id": "program.earn_rate",
      "domain": "program",
      "fact_class": 5,
      "subject_type": "tier",
      "datatype": "decimal",
      "identity_fields": [
        "tier",
        "cardholder",
        "fare_family",
        "paid_with"
      ],
      "stated_date": "effective_date",
      "phrase": "{tier} members earn {multiplier} miles per dollar on a {fare_family} fare paid with {paid_with}, when the member's United card is {cardholder}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tier",
          "cardholder",
          "fare_family",
          "paid_with",
          "multiplier"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "cardholder": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "multiplier": {
            "type": "number",
            "minimum": 0
          },
          "fare_family": {
            "$comment": "united.com/fly/mileageplus/earn-miles.html splits its own tables into \"Standard fares\" and \"Basic Economy fares and base options\", so `standard` is United's own bucket, not a synonym for `any`.",
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award",
              "standard",
              "any"
            ]
          },
          "paid_with": {
            "$comment": "Holding a card and paying with it are two different rates. united.com/fly/mileageplus/earn-miles.html gives a 1K cardmember 12 miles/$ on a standard fare bought by any means, and 17 only in the United Club Card column of the table headed \"Rates shown are for standard tickets only\". Without this field the two are one key and the larger number silently wins (§6.4).",
            "type": "string",
            "enum": [
              "any_method",
              "united_card"
            ]
          }
        }
      },
      "unit": "miles_per_usd",
      "entity_fields": {
        "tier": "tier"
      }
    },
    {
      "id": "program.pluspoints_cost",
      "domain": "program",
      "fact_class": 8,
      "subject_type": "instrument",
      "datatype": "int",
      "identity_fields": [
        "from",
        "to",
        "haul",
        "fare_class_band",
        "carrier"
      ],
      "stated_date": "effective_date",
      "phrase": "A {haul} upgrade from {from} to {to} on {carrier} costs {points} PlusPoints ({fare_class_band})",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "from",
          "to",
          "haul",
          "fare_class_band",
          "carrier",
          "points"
        ],
        "properties": {
          "from": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "to": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "points": {
            "type": "integer",
            "minimum": 0
          },
          "haul": {
            "type": "string",
            "enum": [
              "long_haul_intl",
              "short_haul",
              "transcon_hawaii",
              "domestic",
              "any"
            ]
          },
          "fare_class_band": {
            "$comment": "united.com PlusPoints: \"Requests from United Economy fare classes S, T, L, K and G to United Polaris class cost 80 PlusPoints. All other economy to Polaris requests cost 40 PlusPoints.\" Without this field 40 and 80 are the same key and one of them is discarded (§6.4). `discounted` is the S/T/L/K/G set the page names; `standard` is the \"all other economy\" remainder; `any` is a row the split does not reach.",
            "type": "string",
            "enum": [
              "discounted",
              "standard",
              "any"
            ]
          },
          "carrier": {
            "$comment": "united.com PlusPoints: partner requests \"are always 40 points\", which collides with the mainline chart unless the operator is part of the key. `partner` is the ANA / Lufthansa / Copa set the page names.",
            "type": "string",
            "enum": [
              "united_mainline",
              "partner",
              "any"
            ]
          }
        }
      },
      "unit": "points"
    },
    {
      "id": "program.pluspoints_earn",
      "domain": "program",
      "fact_class": 8,
      "subject_type": "instrument",
      "datatype": "int",
      "identity_fields": [
        "tier"
      ],
      "stated_date": "effective_date",
      "phrase": "{tier} members receive {points} PlusPoints",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tier",
          "points"
        ],
        "properties": {
          "tier": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "points": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "points",
      "entity_fields": {
        "tier": "tier"
      }
    },
    {
      "id": "program.pluspoints_expiry",
      "domain": "program",
      "fact_class": 8,
      "subject_type": "instrument",
      "datatype": "int",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "PlusPoints expire {months} months after they are issued",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "months"
        ],
        "properties": {
          "months": {
            "type": "integer",
            "minimum": 0
          }
        }
      },
      "unit": "months"
    },
    {
      "id": "program.upgrade_bucket",
      "domain": "program",
      "fact_class": 8,
      "subject_type": "instrument",
      "datatype": "string",
      "identity_fields": [
        "code"
      ],
      "stated_date": "effective_date",
      "phrase": "Upgrade class {code} means {meaning}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "code",
          "meaning"
        ],
        "properties": {
          "code": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "meaning": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "entity_fields": {
        "code": "bucket"
      }
    },
    {
      "id": "program.award_pricing_model",
      "domain": "program",
      "fact_class": 6,
      "subject_type": "instrument",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "United prices award tickets by {model}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "model"
        ],
        "properties": {
          "model": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "program.award_discount",
      "domain": "program",
      "fact_class": 6,
      "subject_type": "instrument",
      "datatype": "decimal",
      "identity_fields": [
        "who"
      ],
      "stated_date": "effective_date",
      "phrase": "{who} get {pct} off an award ticket",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "who",
          "pct"
        ],
        "properties": {
          "who": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "pct": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          }
        }
      },
      "unit": "pct"
    },
    {
      "id": "program.award_change_fee",
      "domain": "program",
      "fact_class": 6,
      "subject_type": "instrument",
      "datatype": "decimal",
      "identity_fields": [
        "kind"
      ],
      "stated_date": "effective_date",
      "phrase": "Changing a {kind} award costs {usd}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "kind",
          "usd"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "change",
              "cancel",
              "redeposit",
              "no_show",
              "upgrade-award-redeposit"
            ]
          },
          "usd": {
            "type": "number",
            "minimum": 0
          }
        }
      },
      "unit": "usd"
    },
    {
      "id": "program.miles_expiry",
      "domain": "program",
      "fact_class": 5,
      "subject_type": "instrument",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "MileagePlus miles: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rule"
        ],
        "properties": {
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "program.mile_pooling",
      "domain": "program",
      "fact_class": 5,
      "subject_type": "instrument",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "Pooling miles: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "rule"
        ],
        "properties": {
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "program.card_benefit",
      "domain": "program",
      "fact_class": 7,
      "subject_type": "card",
      "datatype": "json",
      "identity_fields": [
        "card",
        "benefit"
      ],
      "stated_date": "effective_date",
      "phrase": "The {card} card includes {benefit}: {value}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "card",
          "benefit",
          "value"
        ],
        "properties": {
          "card": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "benefit": {
            "type": "string",
            "enum": [
              "checked_bag_free",
              "priority_boarding",
              "united_club_membership",
              "united_club_passes",
              "tsa_precheck_credit",
              "award_flight_discount",
              "premier_qualifying_points",
              "travel_credit",
              "no_foreign_transaction_fee"
            ]
          },
          "value": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "entity_fields": {
        "card": "card"
      }
    },
    {
      "id": "program.partner_earn",
      "domain": "program",
      "fact_class": 5,
      "subject_type": "partner",
      "datatype": "string",
      "identity_fields": [
        "partner"
      ],
      "stated_date": "effective_date",
      "phrase": "Earning on {partner}: {rule}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "partner",
          "rule"
        ],
        "properties": {
          "partner": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_-]*$"
          },
          "rule": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "entity_fields": {
        "partner": "partner"
      }
    },
    {
      "id": "program.membership_price",
      "domain": "program",
      "fact_class": 9,
      "subject_type": "tier",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "United Club membership costs {usd}[ or {miles} miles]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "usd"
        ],
        "properties": {
          "usd": {
            "type": "number",
            "minimum": 0
          },
          "miles": {
            "type": "integer",
            "minimum": 0
          }
        }
      }
    },
    {
      "id": "program.one_time_pass",
      "domain": "program",
      "fact_class": 9,
      "subject_type": "tier",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "A one-time United Club pass costs {usd}[, valid for {window_h} hours]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "usd"
        ],
        "properties": {
          "usd": {
            "type": "number",
            "minimum": 0
          },
          "window_h": {
            "type": "integer",
            "minimum": 0
          }
        }
      }
    },
    {
      "id": "lounge.exists",
      "domain": "lounge",
      "fact_class": 9,
      "subject_type": "lounge",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} is a {brand} lounge[ at {location}] ({status})",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "brand",
          "status"
        ],
        "properties": {
          "brand": {
            "type": "string",
            "minLength": 1
          },
          "location": {
            "type": "string",
            "minLength": 1
          },
          "status": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "lounge.access_rule",
      "domain": "lounge",
      "fact_class": 9,
      "subject_type": "lounge",
      "datatype": "json",
      "identity_fields": [
        "carrier",
        "cabin",
        "haul",
        "phase",
        "status_req",
        "fare_tier"
      ],
      "stated_date": "effective_date",
      "phrase": "{status_req} passengers in {cabin} on a {haul} {carrier} flight are allowed in {subject}: {allowed} ({phase}, {fare_tier} fare)[, with {guests} guests][, same day only: {same_day}][, redirected to {redirected_to}][, which applies to {scope}][, operated by {lounge_operator}]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "carrier",
          "cabin",
          "haul",
          "phase",
          "status_req",
          "fare_tier",
          "allowed"
        ],
        "properties": {
          "carrier": {
            "type": "string",
            "enum": [
              "united_mainline",
              "united_express",
              "a3",
              "ac",
              "ai",
              "av",
              "az",
              "br",
              "ca",
              "cm",
              "et",
              "lh",
              "lo",
              "lx",
              "ms",
              "nh",
              "nz",
              "os",
              "oz",
              "ou",
              "sa",
              "sn",
              "sq",
              "tg",
              "tk",
              "tp",
              "zh",
              "b6",
              "other"
            ]
          },
          "cabin": {
            "type": "string",
            "enum": [
              "polaris_business",
              "business",
              "first",
              "premium_plus",
              "economy",
              "any"
            ]
          },
          "haul": {
            "type": "string",
            "enum": [
              "long_haul_intl",
              "intl",
              "domestic",
              "any"
            ]
          },
          "phase": {
            "type": "string",
            "enum": [
              "dep",
              "arr",
              "conn"
            ]
          },
          "status_req": {
            "type": "string",
            "enum": [
              "none",
              "star_gold",
              "premier_gold_plus",
              "club_member",
              "club_pass"
            ]
          },
          "allowed": {
            "type": "boolean"
          },
          "guests": {
            "type": "integer",
            "minimum": 0
          },
          "same_day": {
            "type": "boolean"
          },
          "fare_tier": {
            "type": "string",
            "enum": [
              "base",
              "standard",
              "flexible",
              "any"
            ]
          },
          "redirected_to": {
            "type": "string",
            "enum": [
              "united_club",
              "polaris_lounge",
              "partner_lounge",
              "none"
            ]
          },
          "scope": {
            "type": "string",
            "minLength": 1
          },
          "lounge_operator": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    {
      "id": "codes.booking_class",
      "domain": "codes",
      "fact_class": 12,
      "subject_type": "class",
      "datatype": "json",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} is a {cabin} booking class[ on a {fare_family} fare]",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "cabin"
        ],
        "properties": {
          "cabin": {
            "type": "string",
            "enum": [
              "polaris_business",
              "business",
              "first",
              "premium_plus",
              "economy",
              "any"
            ]
          },
          "fare_family": {
            "type": "string",
            "enum": [
              "basic_economy",
              "economy",
              "premium_plus",
              "business",
              "first",
              "award"
            ]
          }
        }
      },
      "lead_only": true
    },
    {
      "id": "codes.bucket_meaning",
      "domain": "codes",
      "fact_class": 12,
      "subject_type": "bucket",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} means {meaning}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "meaning"
        ],
        "properties": {
          "meaning": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "lead_only": true
    },
    {
      "id": "codes.ticket_stock_prefix",
      "domain": "codes",
      "fact_class": 12,
      "subject_type": "airline",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "{subject} ticket stock begins with {prefix}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "prefix"
        ],
        "properties": {
          "prefix": {
            "type": "string",
            "pattern": "^[0-9]{3}$"
          }
        }
      },
      "lead_only": true
    },
    {
      "id": "codes.pnr_format",
      "domain": "codes",
      "fact_class": 12,
      "subject_type": "airline",
      "datatype": "string",
      "identity_fields": [],
      "stated_date": "effective_date",
      "phrase": "A {subject} record locator looks like {format}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "format"
        ],
        "properties": {
          "format": {
            "type": "string",
            "minLength": 1
          }
        }
      },
      "lead_only": true
    },
    {
      "id": "codes.boarding_group",
      "domain": "codes",
      "fact_class": 4,
      "subject_type": "airline",
      "datatype": "string",
      "identity_fields": [
        "group"
      ],
      "stated_date": "effective_date",
      "phrase": "Boarding group {group} is {who}",
      "object_schema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "group",
          "who"
        ],
        "properties": {
          "group": {
            "type": "integer",
            "minimum": 1,
            "maximum": 6
          },
          "who": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    }
  ]
}
