[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] NOVEMBER ONE SEVEN XRAY XRAY NORCAL DEPARTURE CLIMBING THROUGH ONE THOUSAND MAINTAINING TWO THOUSAND FIVE HUNDRED DIRECT SAN CARLOS

[Assistant] {"segments": [{"intent": "position_report", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] CROSS RUNWAY ONE ZERO AT BRAVO AND TAXI TO RUNWAY FIVE NOVEMBER ONE SEVEN XRAY XRAY

[Assistant] {"segments": [{"intent": "taxi_instruction", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] November One Seven Xray Xray Report Base Runway Three Zero

[Assistant] {"segments": [{"intent": "report_request", "slots": {"pattern_leg": "base", "runway": "three zero"}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] November One Seven X-ray X-ray, traffic eleven o'clock, one mile, helicopter northbound, no factor.

[Assistant] {"segments": [{"intent": "traffic_advisory", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] November One Seven Xray Xray Flight Service With A Briefing Copied Conditions Vfr

[Assistant] {"segments": [{"intent": "informational", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] LAFAYETTE TOWER Cessna ONE SEVEN XRAY XRAY RUNWAY FIVE READY FOR DEPARTURE NORTH DEPARTURE

[Assistant] {"segments": [{"intent": "comm_request", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] Mayday, Mayday, Mayday. Bakersfield Tower, November One Seven X-ray X-ray. Bird strike. Intend landing at Bakersfield. Ten miles south, at three thousand five hundred. IFR pilot.

[Assistant] {"segments": [{"intent": "emergency_declaration", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] REMAIN CLEAR ADIS TRAFFIC INBOUND

[Assistant] {"segments": [{"intent": "informational", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] TRAFFIC IN THE PATTERN PALLO ALTO TRAFFIC CESSNA ONE TWO THREE ALPHA BRAVO ENTERING LEFT DOWNWIND RUNWAY THREE ONE PALLO ALTO over

[Assistant] {"segments": [{"intent": "ctaf_broadcast", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] November One Seven X-ray X-ray, Eagle Creek Tower, number two for Runway two seven left, traffic turning final

[Assistant] {"segments": [{"intent": "sequencing", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] Altimeter THIRTY POINT ZERO TWO TRANSITION APPROVED WARRIOR THIRTY ONE THOUSAND EIGHT HUNDRED SIXTY TWO

[Assistant] {"segments": [{"intent": "altimeter_setting", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] RUNWAY FIVE CLEARED FOR TAKEOFF MAKE RIGHT TRAFFIC FOR NORTH DEPARTURE

[Assistant] {"segments": [{"intent": "takeoff_clearance", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] CONTINUE THE THREE SIXTY REPORT WHEN COMPLETE YOU'RE DOING WELL

[Assistant] {"segments": [{"intent": "spacing_instruction", "slots": {}, "text": ""}, {"intent": "report_request", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] Pan pan pan pan pan pan Riverside TOWER NOVEMBER ONE SEVEN XRAY XRAY

[Assistant] {"segments": [{"intent": "emergency_declaration", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] N17XX LLOYS ANGELS GROUND ADIS PENETRATION PROCEEDURES COMPLETE DVFR FLIGHT PLAN PROPERLY CLOSED ALL SECURITY REQUIREMENTS MET PARKING AVAILABLE AT TERMINAL HAVE A GOOD DAY

[Assistant] {"segments": [{"intent": "informational", "slots": {}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] HELICOPTER ENTER PATTERN

[Assistant] {"segments": [{"intent": "unknown", "slots": {}, "text": "HELICOPTER ENTER PATTERN"}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] November One Seven Xray Xray Lafiette Ground Taxi To Runway Five Via Alpha Cross Runway One Zero At Alpha

[Assistant] {"segments": [{"intent": "taxi_instruction", "slots": {"runway": "five", "route": "Alpha"}, "text": ""}, {"intent": "runway_crossing", "slots": {"runway": "one zero", "taxiway": "Alpha"}, "text": ""}], "abstain_reason": null}


[System]
You are an ATC parser. Parse the air traffic control transmission into a JSON object.

OUTPUT SCHEMA (always emit `segments` list, even single-intent turns):
{
  "segments": [
    {"intent": <one-of-enum>, "slots": {<lowercase_key>: <value>}, "text": <segment substring>}
  ],
  "abstain_reason": null | <short reason if unsure>
}

Intent enum (51 values, includes `unknown` for ambiguous/garbled):
acknowledgment, altimeter_setting, altitude_instruction, approach_clearance, cleared_option, cleared_touch_and_go, comm_request, correction, crossing_restriction, ctaf_broadcast, departure_instruction, direct_to, disregard, emergency_declaration, extend_downwind, frequency_change, go_around, ground_hold, heading_instruction, hold_for_release, hold_instruction, hold_short, ident, ifr_clearance, informational, landing_clearance, line_up_and_wait, missed_approach, other, pattern_entry, position_report, radar_identification, radar_status, release, report_request, route_amendment, route_clearance, runway_crossing, sequencing, short_approach, spacing_instruction, speed_assignment, squawk_code_set, takeoff_clearance, taxi_instruction, traffic_advisory, unable_response, verification_request, vfr_instruction, weather_advisory, unknown

Slot keys (lowercase only): altimeter_setting, altitude, approach_type, call_sign, clock_position, direction, distance, facility, fix, frequency, heading, pattern_leg, route, runway, speed, taxiway, time, transponder_code, turn_direction, sequence

Rules:
1. Compound transmissions get multiple segments — split by comma, period, or new clause.
2. Single-intent transmissions still emit one segment in the list.
3. Use `unknown` intent + `abstain_reason` when transcript is garbled, partial, or doesn't match any enum.
4. Slots is FMM-relevant subset only — do NOT include callsign or facility unless required for the action.
5. Output ONLY the JSON object.

[User] NOVEMBER ONE SEVEN X-RAY X-RAY LAFIETTE TOWER HOLD SHORT RUNWAY FIVE TRAFFIC ON SHORT FINAL

[Assistant] {"segments": [{"intent": "hold_short", "slots": {"runway": "five"}, "text": ""}, {"intent": "traffic_advisory", "slots": {"pattern_leg": "short final"}, "text": ""}], "abstain_reason": null}